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