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

# 基础字符

元字符含义
.匹配除换行符的所有的字符
\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