正则表达式就是一种规定类型的字符串,可以用正则表达式筛选出符合条件的字符串进行后续操作

基础字符

元字符 含义
. 匹配除换行符的所有的字符
\d 匹配0-9数字(digit)
\D 匹配非0-9数字(not digit)
\w 匹配大小写字母、0-9数字、_(word character)
\W 匹配非大小写字母、0-9数字、_(not a word character)
\s 匹配空白符(whitespace)
\S 匹配非空白符(not whitespace)
\b 匹配单词的开始的字符(word boundary)
\B 匹配非单词的开始的字符(not a word boundary)
^ 匹配字符串的开始
$ 匹配字符串的结束

比如对应一串数字1035154062

其正则表达式即^\d\d\d\d\d\d\d\d\d\d$

重复

但这样写实在太长了,所以出现了记录重复的记号

重复记号 含义
* 重复0次或更多次
+ 重复1次或更多次
? 重复0次或1次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

那么对于上面的数字1035154062,正则表达式即\d{10}

转义

对于一些是内容的字符与正则表达式的语法冲突时,在字符前加\可以转换成内容

比如内容为(Hello World)

正则表达式则为\(Hello Wolrd\)

分组

()可以包含进整体的内容,并且记录组别

比如对于一组网址

https://aimip02.cn
https://www.baidu.com
http://bgm.tv
https://luogu.org

写出其正则表达式https?://(www\.)?(\w+)(\.\w+),每一个括号即一组,下标从1开始,每一组用$1 $2 $3表示

Group 1: 
Group 1: www.
Group 1: 
Group 1:

Group 2: aimip02
Group 2: baidu
Group 2: bgm
Group 2: luogu

Group 3: .cn
Group 3: .com
Group 3: .tv
Group 3: .org

区间

[]可以规定出区间和单个符合条件,[^ ]即条件补集

比如对于

123-456-789
987.654.321

用正则表达式选出来,即\d+[.-]\d+[.-]\d{3}

或者是[0-9]+[.-][0-9]+[.-][0-9]{3}

|

比如对于一组人名

Mr. Smith
Mrs Y
Mr Spike
Ms. Faye

其中有的有点,有的没有,有的是Mrs,有的是Mr,用正则表达式全部概括即M(r|s|rs)\.?\s[A-Z]\w*

零宽断言

正向先行断言:匹配目标字符串前的内容

?=target

比如查询阅读量返回数字

"<span class="read-count">阅读量:114514</span>"

正则表达式为\d+(?=</span>),输出114514

正向先行断言:匹配目标字符串后的内容

?<=target

比如查询阅读量返回数字

"<span class="read-count">阅读量:1919810</span>"

(?<=<span class="read-count">阅读量:)\d+,输出1919810

负向先行断言

?!target

负向后行断言

?<!target