
b站具有弹幕的正则屏蔽 功能,很多人可能不知道正则是什么意思,但是作为程序员,这是必要的修养。如果你不是程序员,也没有关系,本文力图让普通人也可以理解和使用正则屏蔽。不过我主要是写python3的,b站不知道用什么语言处理的,不同语言的正则基本是一样的,但是还是有一些不同的,当然用作弹幕屏蔽不需要知道那么深入。
相信大家都用过弹幕屏蔽功能,在电脑手机端都有。普通的弹幕屏蔽规则很简单,比如你屏蔽“前”字,那么所有带“前”字的弹幕都会被屏蔽掉,比如视频开头喜欢刷的“前三”,“前十”,但是同时,你也看不到“前方高能”这样的弹幕了。
比方说很多人经常刷:

这么可爱的动画刷这个太禽兽了
考虑到还有人刷类似"我家母猪怀孕,谁干的?",所以大概会选择屏蔽"干的",然而,我又想到有些大快人心的地方看到大家刷"干的漂亮"还是很开心的,那么有什么办法呢。如果你知道正则表达式的话,你可以输入下面的正则屏蔽词:
下面解释一下这是什么意思呢?
首先//是b站正则屏蔽要求的符号,据我浅薄的知识,javascript的正则表达式是这个符号,可能这也是b站使用正则版本。
“干的”这两个字还是必须存在的,接下来的[]符号表示范围,也就是在里面选择其中一个符号,为了阻止某些神棍,还是中英文都加上吧。
不过有的人不加标点或者加"!!!"这样的呢?[]符号之后的*符号表示匹配0次或多次。
既然可以匹配0次,不还是和"干的"两个字没有区别吗?别慌,最后$符号表示末尾匹配,也就是上述字符串在末尾出现才匹配成功
现在你将屏蔽掉大部分,而且不会伤害到“干的漂亮”,不过据我观察还是有一些漏网之鱼,这些神棍直接把人屏蔽吧。
怎么样,是不是很神奇。这就是正则表达式的有趣之处。
限定符:前面已经出现过,主要有*(0到多个),?(0或1个),+(1到多个),{n}(n个),{n,m}(n到m个),{n,}(n个以上)。限定符都紧跟在要限定的字符后面。比如yo+可以匹配"yooooooo...",而you{2,3}只匹配"yoo"或"yooo"。
定位符:前面也已经出现过了。
^匹配开头,放在字符串开头。
$匹配结尾,放在字符串结尾。
\b边界,即和字符和空格边界,单词一般左右两个边界,因此\b的位置决定了匹配那个边界。
\B非边界,位置不重要,因为非边界并不会管你是哪个边界。
范围:这个前面也出现过,就是[]符号。此外,选择符号还可以用[0-9]表示全部数字,[0-9a-zA-Z]表示全部数字以及全部字母。值得一提的是[\u4e00-\u9fa5]可以匹配全部中文字符。此外,^符号在这里还有另外一个作用,就是否定,例如[^0-9]匹配所有非数字字符。
选择:|表示选择,例如男主|女主,就可以将这两个都匹配到。[]在范围内选择是单字符,而选择给出了更大的自由。
括号:我们已经见识到了[](范围)和{}(限定)的作用,还有就是()符号了,括号提供了一个独立的空间,例如(男|女)主和前面是一样的,此处的选择操作就只发生在括号内部。对程序员还有更多用处,这里就不提及了。
转义:有一点程序基础的应该会想到,前面定义了这么多特殊字符,应该要用到转义吧。一些非打印字符如\t\r\n\f等,依然保持原样,前面提到的特殊作用的字符,如果要匹配,需要在前面加上\转义,比如\$匹配字符$。
特殊字符:除了上面的,还有一些特殊字符以及特殊转义。
.,匹配除了换行符\n之外任意单字符。
\d,数字,等价于[0-9];\D,非数字,等价于[^0-9]
\w,任意数字,字母以及下划线。\W,\w之外的字符。
\s,任意空白字符,等价于[ \f\n\r\t\v],\S,任意非空字符。因此,通常可以使用[\s\S]来匹配任意字符。
前面提到的刷“前几”的,可以这样屏蔽:/[前第][一-十]/。这要感谢在汉字编码时一到十的是连续的,因此这个可以匹配“第三”之类的
在《狼与香辛料》开头,有很多人刷“从……来的“,屏蔽单字杀伤面积过大,用正则可以写:/从.+来/。还记得.匹配除了换行符\n之外任意单字符吗,还有+的用法。这个例子说明了正则屏蔽可以屏蔽某些句式,在某些讨厌的大量刷屏时还是很有用的。
关于刷日期,如果时单纯数字日期,/\d+.\d+.\d+/就可以屏蔽诸如2018.6.18。不过有时候他们刷2月30日这样就很讨厌。我想到的办法也只有/[0145789]/,当然我还是想看23333和666666的。
忘记在哪部番,有大量”吓得我……“,然而他们毕竟还是小学生,以至于出现不少”下的我……“。于是我只好正则屏蔽:/^[下吓][的地得到]我/,注意我用了一个从头开始匹配。所以说,以前也有不少,屏蔽“菜月昴”却因为别人写错字看到不想看到的词,也可以采用类似的写法。

大量刷别的番相关内容是不好的