要说难缠的家伙,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}