要说难缠的家伙,B站你们知道吧?
作为中国最大的弹幕视频网站,随着近年来的商业化进程,B站的弹幕生态遭遇了打击——简单来讲,有很多做事不考虑别人感受的人,利用弹幕的匿名性,发一些让人不快的弹幕。
主要是以下几种:
1. 刷观看时间,如1小时前
5438播放,有图为证
2. 超长弹幕,如长 (省略无数空格) 长
咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕
3. 表白弹幕,如cxk我喜欢你
qbl我们在一起吧
4. 疯狂刷某种梗,如石粒石粒石粒石粒石粒石粒
fbkfbkfbkfbkfbk
5. 不合时宜地用梗,如来世愿做方块人
富有的微笑
6. 人身攻击/阴阳怪气,如去你*的
这就是二刺螈吗
很多,很杂,很乱,你需要将屏蔽等级开到最高(x)
电脑上没有屏蔽等级这个功能,我们应该怎么办?正则表达式。
我们按处理难度给这些烦人的弹幕分分类。
- 明显固定格式的
富有让我们相遇
1小时前
- 替换字词,格式变动的
来世愿做XXX
xz妈妈爱你
- 刷重复的字词
枯燥枯燥枯燥枯燥枯燥枯燥
???????
对付第一种替换字词,格式不怎么变化的弹幕,可以使用上节课的知识。
比如针对富有让我们相遇
大会员使我们相遇
,可以使用:
[富贫会有][有穷员钱][让使]我们?相[遇聚]
第二种替换字词,同时格式会有变化的弹幕,需要一些更奇特的手段。
比如'cxk我爱你' 和 '我们要一直在一起,qbl' 两个句子很明显类型都是表白怪,但是句式不一样,此时我们需要这个东西:
()
和|
<--语言很难描述,举个例子:
我(喜欢|[Ll][Ii][Kk][Ee])(U|[Yy][Oo][Uu]|你)
会匹配我喜欢你
我喜欢you
,但不会匹配我爱你
。
括号里的内容会视为一个整体,而|
则是表示或
的逻辑概念。
说人话就是:(你|我|大家)
的逻辑意思是“你” 或 “我” 或 “大家”
。
所以针对这些表白弹幕,可以针对其中一定会出现的关键词,使用:
..([Ii]|[我咱俺私]|一直|永远|真的|[老劳][资子]).?([等爱喜欢好Ll]+.*([你UuYy])|一起)
刷重复字词的其实是最简单也是最让人难受的弹幕,因为你不能用[\u0000-\uffff]
来屏蔽所有的弹幕,那样不如直接关弹幕。所以我们需要一些新的东西。
\1
和{}
括号匹配的内容并不会全部木大,而是会留着备用。举个例子:
用(你我他)在玩mc
来匹配你在玩mc
,你的程序会记住你
这个字;这个特性利用起来,可以用于匹配重复的字符。
比如说(.)
可以匹配任何字符,而(.)\1
可以匹配两个连在一起的相同字符,比如说哈哈
喵喵
。
如果我要屏蔽多个连在一起的相同字符呢?总不能用无数个\1
吧?
是的,{}
就是这个作用。
{n,m}
匹配n到m个(n<=m)前个字符/括号
{n}
匹配n个前个字符/括号
{n,}
至少匹配n个前个字符/括号(或者说匹配n次到无穷次)
有了这些知识储备,我们就能写出这样的正则表达式:
(.)\1{5,}
当一个字符连续出现6次的时候匹配成功。
不过,怎么匹配fbkfbkfbkfbk
这样的重复词弹幕呢?我直接放答案,请大家自己研究。
(\S+)(.*\1){5}