正则表达式就是一种规定类型的字符串,可以用正则表达式筛选出符合条件的字符串进行后续操作
基础字符
元字符 | 含义 |
---|---|
. | 匹配除换行符的所有的字符 |
\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