引言
正则表达式(Regular Expression,缩写regex)是进行字符串匹配操作的一种常用方式,也是一种功能极丰富的方式,在如今几乎所有的编程语言中都有相关的应用。除此之外,它在文本编辑器中也有着广泛应用。
正则这个名字初看会让人摸不着头脑,但其实它的含义不过是通过符号来表示具有一定规律的字符串而已。
以下将介绍一些常用的正则表达式及一些应用场景。本文只使用现成语句,不会过多介绍正则表达式的语法,关于其具体字符的含义,可以查询相关的工具网站。
应用
弹幕屏蔽词
许多弹幕网站都有着弹幕屏蔽规则。但似乎很多时候仅仅添加屏蔽词并不能很好地解决问题,这时候就轮到正则表达式出场了。(注:以下正则表达式使用正斜杠/包裹)
不想被前排弹幕刷屏?
正则可以满足你:
/.*前排?$/
/^\s(前|第)\s(\d+|(一|二|三|四|五|六|七|八|九|十).*)/
不想被大家的观看日期干扰?
也行:
/(\d+.)?\d+.\d+/
/(.+年)?.+月.+日?/
不想看到不同长度的2333?
当然也可以:
/^23*$/
注:\d匹配一个数字,\s匹配任意空白字符,?表示最小匹配,+表示匹配一个以上字符,*表示匹配零个以上字符,.匹配一个任意字符
但要怎么用呢,以bilibili为例,只要在屏蔽列表里添加以上内容就好啦。(箭头所示位置)
文档内容查询替换
对于纯文本文档,正则表达式是再好不过的查询替换工具,许多常用的文本/代码编辑器都支持通过正则表达式进行查找替换。
VS Code
以Visual Studio Code为例,按CTRL+F打开搜索框,
打开使用正则表达式的按钮就可以了。如果你了解什么是捕获组,那么在VS Code的替换中可以使用$n取得第n个捕获组。
Notepad++
如果你使用Notepad++,那也没有问题,同样的操作即可使用正则来查询替换。
CommandLine(VIM)
什么?你是命令行用户?那vim的正则表达式也不赖。
在vim中使用正则表达式只需要按/,然后输入要搜索的内容,不过要注意的一点是,表达式需要被包裹在\中,且元字符的表达方式也与常规方式有点不一样。
用正则表达式来校验输入
由于有着强大的匹配功能,正则表达式最常见的用处是做输入校验,遥想前段时间的bilibili源代码泄露事件,相关的代码就被解剖了一番。
无论前端还是后端开发,通过正则进行输入校验提升用户体验或者以模式匹配来防止注入攻击都是常见的用法。
那么日常使用中有哪些常用的输入校验用的正则呢,以下是其中一些示例。
密码强度检验
长度不小于8的大小写字母与数字组合密码:
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$
Email地址
任意符合规范的Email地址:
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
URL
http协议:
^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
任意协议:
[a-zA-z]+://[^\s]*
日期
如2019-1-1:
^\d{2,4}[-|.]\d{1,2}[-|.]\d{1,2}
手机号码
国内常用手机号码:
下方可复制正则表达式:
^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
空白行
可用于删除空白行:
\n\s*
HTML标签匹配
(部分)可用于爬虫或网页结构分析:
]*>.*?\1>|<.>
俗话说:正则写得好,代码写得少(并没有),有时候一行正则表达式能抵得上几十行的匹配用代码,甚至能完成一些本来很难实现的功能,可以说妙用无穷,它能怎么用,可以说没有一个定论,或许这只取决于你的创造力有多少。
END