用于过滤微博的正则表达式快速入门

很多消息过滤的脚本都提供了按正则表达式过滤的功能,正则表达式功能十分强大,用好正则表达式,可以让书写规则事半功倍。

还没安装脚本的话,可以先戳 YAWF脚本主页,根据说明安装好脚本;或者先读完本文,看看正则表达式都能帮你写出怎样的规则,再考虑要不要安装也不迟。

这篇文章不打算系统地介绍正则表达式的使用,而是希望用举例的方法介绍常用的一些常见的写法和用法。你可以从这篇文章中选取一些您需要的正则式来使用,也可以仿照这些正则式编写自己的正则式。

如果您希望系统地学习正则表达式,您可以参考这些网络资源:

如果你有不错的过滤规则,也欢迎和大家分享分享。

换行和空白

举例:/\n/
举例:/\s/
说明:关键词屏蔽会忽略规则开头和结尾的空白字符,所以在匹配这些字符时可能需要使用正则表达式。\s表示任意空白字符,包括半角空格、全角空格、换行等等;\n表示换行符。

任意字符

举例:/我刚换了.*模板/
举例:/我更新了微博.*客户端/
说明:正则式和一般用的通配符不一样,如果想匹配任何内容,需要用 .* 来表示。其中 . 表示随便什么字符(换行除外)都匹配, * 表示不管有几个都匹配。如果需要匹配换行符,可以用 [\s\S] 代替 .

一系列词汇中的任意一个

举例:/[乜佢咁咗係掂揾睇嘅嗰嘢]/
说明:半角的方括号,表示里面出现的这些字,出现任何一个都算匹配成功。比如上面这条正则式,微博里面出现了这些字的任意一个都可以匹配到。

举例:/[가-힣]/
说明:如果是编码连续的若干个字符,可以用一个半角的减号来省略中间的字符。例如这条规则可以匹配包含任意朝鲜语字母的字符串。(至于什么是字符编码,如果不清楚也不用深究,总之就是电脑内对字符的一种排列方式,类似于字典里面从某个字排在第几个的意思。)

举例:/[\u3041-\u3096\u30A0-\u30FF\uFF5F-\uFF9F\u31F0-\u31FF\u3220-\u3243\u3280-\u337F]/
说明:除了直接写出文字,也可以用 \uXXXX 的方式来表示一个字符,XXXX处填写的是这个字符的编码。(作为一个比较高级的功能,如果不明白也不用担心,能看懂就好了。)上面这个正则式匹配包含日语平假名、片假名或一些日语专用字符的字符串。

举例:/抽[一二三四五六七八九十1-9两俩仨]/
说明:匹配一系列词汇中任何一个的规则可以和直接匹配文本的规则共同使用。比如这条正则式会匹配含有“抽一个”“抽两名”“抽仨人”等类似内容的字符串。

举例:/(双子|双鱼|处女|天秤|天蝎|射手|巨蟹|摩羯|水瓶|狮子|白羊|金牛)/
说明:竖线表示两边的规则满足任何一个都算匹配,对于多字的词汇,就需要用这种方法来表示。比如对于上面这条规则,一个字符串包含这十二个词中的任何一个都会被匹配。

同时满足若干个规则

举例:/^(?=[\s\S]*抽)(?=[\s\S]*送)/
说明:使用 /^(?=[\s\S]*XXX)(?=[\s\S]*YYY)(?=[\s\S]*ZZZ)/ 的格式可以匹配同时满足XXX、YYY和ZZZ等三条规则的字符串。比如上面举例的这条规则可以匹配同时带有“抽”和“送”两个字的微博。如果你好奇这是怎么工作的,这里有具体地说明(当然,看不懂不会影响你用这个强大的过滤规则): ^ 表示从字符串开始的位置匹配; (?=xxx) 表示匹配规则xxx,但是不捕获(大概可以理解为检查后面是不是匹配特定规则,但是检查之后光标不往后移动); [\s\S]* 表示从开头到要匹配的规则之间可以有任意的内容。

举例:/^(?=[\s\S]*转发)(?=[\s\S]*(好事|好运|中奖|运气|锦鲤|许愿|愿望|实现))/
说明:这条规则可以匹配出现“转发”一词的同时,出现后面这些词中的任意一个的微博。

其他规则举例

举例:/([微薇危威葳崴徽徵VVvv]|wei)([\(\)\[\]\{()【】『』[]{}].){0,3}([信亻性姓]|xin)/
说明:评论里面经常出现的“请加我微信”一类评论,他们为了躲避新浪的关键词过滤机制,使用各种近似的字符表示“微信”这个词,而且中间还会插入各种乱七八糟的字符。这个正则式可以帮你找到这些评论。其中的 ? 表示可有可无, {0,3} 表示“零到三个”。

重复内容

举例:/(.+)\1{4}/ 说明:如上规则可以匹配将某段文本连续重复5遍(或以上)的字串。前面的 (.+) 匹配第一遍,后面的 \1 表示和第一遍的内容一样,{4} 表示重复4遍。

举例:/(?:^|\n)(.+)(?=\n)([\s\S]*?(?:\n)\1(?=\n|$)){3}/ 说明:如上规则匹配将同样的行重复四遍的字串。这样的微博一般会中间用标点之类的无意义内容撑开很多行,只是为了让你点击“展开全文”才能看到结尾。