本帖最后由 Lwhite 于 2014-5-8 11:57 编辑
正则表达式(Regular Expression)我感觉越来越重要,不仅是linux用户要在一些工具上使用它,对于一个ACG爱好者,Regex也开始发挥它前所未有的作用,屏蔽弹幕。甚至是节省大量编辑特定文本的时间,解放劳动力,让我们把时间拿去做更加有意义的事情。请在学习时务必在AB站播放器 勾上启用屏蔽 和优化屏蔽(正则模式)
元字符
元字符(Metacharacters)的概念很简单,就是描述字符的字符。它本身有别的意思,例如:在WIN的搜索里面输入*.doc 这几个字它会把所有以.doc 为末尾的文件给找出来,而不是只找*.doc 。这个时候* 号的意思就是0或无数个任意字符。
*号
Well,首先是* 符号,在正则表达式里表示重复它前面的那个字符0次到多次
假如输入hel*oheo
hello
helo
hellllllllllllo 复制代码 都会中招
这就很好办了,例如在敖厂长被黑暗之魂虐 的视频里面的一大堆2333。我们可以直接输入23,但是误杀率极高。
降低误杀率,只要句子里面有个2后面跟6个3或以上的就会被屏蔽。我这个人比较挑剔,我只想要屏蔽纯2333的弹幕,如果说句有内容的话后面跟233333呢 ,前面那句话其实也中招了,怎么办,我不想误杀,我要BAN掉以2开头,后面跟一堆3的弹幕。这时需要用到^ 符号。
^符号
它用来匹配行首,在^ 符号后面的字符就是行首。例如^Today ,那么Today is a bad day 就会被匹配。这下那些纯233333就会死光了,大快人心。
然后我觉得这样还不够,要是我是一个有意义的句子后面跟23333333 ,这句话也碍事怎么着?我不想要行尾有6个3以上的句子。
$符号
它和^符号相反,它匹配行尾,使用方法也相反,行尾的字符需要放在它前面。例如西瓜$ ,匹配我要打十个西瓜 这下超过6个3结尾的弹幕就会BAN。同理,以超多w结尾的也能这么玩^$ 能匹配空行,因为^后面和$前面完全没有字符,这对于在写论文或报告里那些手贱多按好几次回车求爽的人有着巨大意义
复制代码 .符号
用于匹配一个任意字符(除了换行符)。用法很简单,我找一本叫X然草的书,我就忘了是什么然草,就是不记得第一个字,于是我就搜.然草 。最后找到了徒然草 这本书。同时我也想起了,我可以利用这个方法来BAN很多弹幕,最简单的例子就是这个XXX我爱你 这下那些XXX我爱你就会死光了,如果你觉得意犹未尽,它也许会输入两个字的或者4个字甚至是5个字的名字。这是绝招,任何以我爱你 作为行尾的都中招这么一想,我发现前面那两个符号根本就不用加上去这么写就完事了。一样能匹配所有我爱你 为行尾的弹幕
[]符号
[] 符号能表示一个范围的一个字符,它支持穷举法列出所有被[] 符号括住的内容,例如我记得我的一个压缩包的密码是5147639X,我就忘了那个那个X是个什么数字,于是使用5147639[1234567890] 去生成一个列表,然后匹配5147639后面加上一个[]符号里面有数字 ,例如其实有更方便的写法[0-9][a-z][A-Z] 这种从左到右从小到大的数字或者英文范围,例如要匹配一个从3-8的数字,可以写[3-8] ,英文也是。这下我能把漏网之鱼我爱您 为结尾的也一起BAN了,非常方便[A-Za-z][A-Za-z]* 这个是给不喜欢鸟语的人看的,他匹配所有英文单词,准备英语考试的同学还有 Patriot 们看到弹幕里的英语也许会产生过敏症状呢,这条玩意是个好药方。
复制代码 如果想相反呢,例如我偏偏不要[r-z] 这个范围怎么办,难道真要我填除了那个范围以外的所有字吗?有更好的方法,使用[^r-z] 就能取相反值,当然,这个可不仅是除了r-z 这个范围的字母,是除了这个范围的所有字符(包括空格,数字,字母等)
\符号
如果我要匹配的是^$ 符号怎么办?它是元字符,现在代表空行,我怎么去让Regex认为它是字符而不是元字符呢?通过\ 符号能轻松地屏蔽掉它后面的那个元字符的意思。让它变回普通的字符,它又被称为转义符现在它就能匹配^$ 了。
这下如果有人在弹幕里说@#$%^&* 也不怕。那么现在发元字符也不怕没法子对付了
\<>符号
这个玩意能对单词实施精确匹配。常用的例子就是he ,一般的搜索匹配会匹配上he she they them there anthem 之类的单词,但用\<he\> 就只能匹配he了,这下对付英语文本的处理就方便起来了。对其进行无比精确的制导攻击,真是老外居家旅行,看AB站,必备良药同时您会发现其实\<>符号是使用转义符\屏蔽<>这两个符号的产物 复制代码 {}系列符号
它和* 符号类似,都是表示它前面的那一个字符的重复,不过这货能指定重复次数进行匹配。只能匹配2后面跟6个3,只能屏蔽2333333匹配2后面跟6个或以上的3匹配2后面跟6-20个的3
这下最初那条2333333*$ 可以改成23{6,}$ 了,简洁了很多。
AB站都有说紫妹会被按在键盘上滚,然后输出一堆乱写的英文这种传统看你还怎么滚键盘
<h1>扩展正则表达式</h1>
?符号
匹配它前面的那个字符0次或者1次,实例
FFF团
它们有时候会少打一个F,所以我们使用这下FFF团算是消停了一些
+符号
它也和* 符号类似,匹配它前面的那个字符多次,而+ 符号至少匹配1次这下3个F以上的弹幕都会消失了,团灭FFF团了真.团灭FFF团
()符号
和[] 符号一样,而且还需要在中间加这个| 符号。传说中的老外万金丹
|符号
它就是或 的意思,可以用它把各种正则表达式1行搞定。格式就是表达式|表达式|表达式|表达式|表达式 ,想要多少条就多少条。紫妈.*[0-9a-zA-Z]{10,}|FF+|f(u|x)(c|x)k
复制代码 注意顺序,它是从左到右匹配的,要是左边匹配成功就不会管了
这是把之前几条表达式合并的产物
A站常用Regex
内含一颗危险(?)误杀率的超新星爆炸发生器 请酌情减轻当量,以免炸错星系(建议从原站点复制,这里的代码里面的一些符号被自动转换了,所以请自行复制使用)
\b符号
它能匹配单词的开始或结束位置,搜寻英文文章单词的利器匹配以he开头的单词,就是说连helicopter helium he之类的单词也能匹配匹配以he结尾的单词,例如the精确匹配he
\w符号
匹配一个字母或数字或下划线它会把30个或以上的字母数字或者下划线组成的弹幕灭掉
\d符号
匹配一个数字误杀率比较高,如果前面加上Q群之类的关键字可以把报Q群号的秒杀
\s符号
匹配一个任意空白符,就是tab和空格看LOL视频的时候或许会需要的东西
\D符号
匹配非数字的一个字符傻字后面通常不会有好事,这也许误杀率过高,但有洁癖的人可以用,实际上A站那个超长Regex里面提取出来有谩骂意向的词效果极佳
\W符号
匹配任意不是字母,数字,下划线的字符
\S符号
匹配非空白字符匹配29个重复的非空白字符匹配29个任意非空白字符组合,也就是限制弹幕长度为29个字
\B符号
匹配非单词开头或者结束的位置
\t符号
匹配Tab键,制表符
\r符号
匹配回车
\n符号
匹配换行,这下竖向弹幕也得中招暂时到这里
扩展链接:
JavaScript用Regex
30分钟学Regex