正则表达式

虽然说正则表达式(regex)对我们oier来说用的比较少,但其功能之强大、实用性之广,可谓吊打C++的string和char,秒杀Windows的通配符

 

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。

正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

 

听起来挺懵对不?

我们来看一个实例:

 

example1:

 

假设你在偷窥一个人的备忘录

这个备忘录很长,大概也就几万字吧

你想找出里面的所有电话号码和电子邮箱地址,咋整?

 

目测法?

其实很简单,你只需要打开这个网页

把你要查找的范围复制粘贴进"在此输入待匹配文本"一栏,

然后在"在此输入正则表达式"一栏输入如下代码:

((\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b))|(((\d{3,4})|\d{3,4}-|s)?\d{7,14})

然后点测试匹配,查询结果就有啦~

 

嗯 很简单吧?

我猜你一定能看懂

 

 

 

……好吧

 

看不懂没关系,先花几分钟看看这篇文章,很轻松就能入门

 

 

 

其实掌握了这些,应付日常生活中的搜索基本就够了

如果要搞网页开发,估计还得学贪婪量词、惰性量词、正则回溯、捕获和非捕获组等神奇的东西……

 

 

 

example2:

 

 

 

在我之前写过的一些博客中,你尝试复制代码到你的开发环境

 

 

 

img

 

 

 

竟然把行号也复制过来了???

 

其实这也是我一开始没想到的,偶然间才发现了这个问题

(所以就写了这篇blog……)

 

那怎么解决类似的问题呢?

 

 

wait

你不是刚学了正则表达式吗?

干嘛不试试?

 

我们来分析一下:

 

对1~9行,行号前多出了两个空格,行号后多出了一个空格,可以这样搜索:

[1-9] 

注意,[1-9]前有两个空格,后有一个空格,不能多不能少!!

[]是中括号表达式,表示区间

[1-9]表示的是1~9之间的任意一个数字。

 

对10~99行,行号前多出两个空格,行号后多出一个空格,同时末尾数字出现了0,可以这样搜索:

[1-9][0-9] 

[1-9]前、[0-9]后各有一个空格

 

对100~最后一行,行号前没有空格,行号后多出一个空格,可以这样搜索:

[1-9][0-9][0-9] 

开头没有空格,末尾一个空格

 

 

这样,每种可能出现的情况就被我们轻松解决啦

 

但是还有一个问题

 

你再回这个页面看看

 

一次似乎只能输入上面的一行表达式

 

但是我们想要同时搜出所有结果,怎么办?

 

很简单。

 

公式:

[1-9] | [1-9][0-9] |[1-9][0-9][0-9] 

我们可以用 | 这个符号将各表达式连起来(注意,|前后的空格数量应和前面推导出来的相符!)

|指明两项之间的一个选择,有点类似C++中的||

 

这样,我们把代码复制粘贴进待匹配文本一栏,点击"替换"即可(替换为空,就相当于删除)

img

 

 

把替换结果复制一下就完成啦~

当然,对于不同情况要差别对待,比如每个行号之前少一个空格、行号后多一个空格等等,相信现在的你也会修改啦~

 

 

至此,正则表达式的教程结束

 

感谢你的耐心阅读~

 

 

 

附:

正则表达式在线编辑工具(戳我)

 

posted @ 2021-08-24 21:18  凌云_void  阅读(77)  评论(4编辑  收藏  举报