正则表达式¶
正则表达式元字符(Metacharacters)¶
元字符用于表示字符集合或具有特殊含义的字符。
常用字符类¶
| 元字符 | 含义 |
|---|---|
. |
匹配任意单个字符 |
\w |
单词字符(字母、数字、下划线) |
\W |
非单词字符(特殊符号类) |
\d |
数字字符 |
\D |
非数字字符 |
\s |
空白字符(空格、tab、换行等) |
\S |
非空白字符 |
边界与位置匹配类¶
| 元字符 | 含义 |
|---|---|
^ |
匹配行首 |
$ |
匹配行尾 |
\A |
匹配开头(不受多行影响) |
\Z |
匹配末尾(不受多行影响,最后可有换行) |
\z |
绝对匹配末尾(不受多行影响,最后换行都不能有) |
\b |
匹配单词边界 |
\B |
匹配非单词边界 |
\G |
上次匹配结束位置 |
^ $ \A \Z \z 解释: 基于边界的匹配。
^ / $ 默认匹配整个输入的开始/结束;当开启多行模式(如 m)时,^ / $ 才会匹配每一行的行首/行尾。但是有时候想要全篇匹配,就需要 \A \Z 精确的匹配开头和结尾,而 \z 则在结尾处要求更严格,即使结尾多一个换行符也不行。
\b \B 解释: 基于单词的匹配。
| Bash | |
|---|---|
\G 解释: 连续性匹配,当匹配到满足项后从该位置继续匹配,不满足就结束匹配。
| Bash | |
|---|---|
控制字符¶
| 元字符 | 含义 |
|---|---|
\n |
换行符 |
\r |
回车符 |
\t |
制表符 |
\f |
换页符 |
\a |
响铃符 |
\e |
ESC 字符 |
Unicode 支持(高级)¶
不太常用可以了解一下。
| 元字符 | 含义 |
|---|---|
\uhhhh |
16 进制 Unicode 字符 |
\Uhhhhhhhh |
8 位 Unicode 字符 |
\xhh |
2 位 16 进制字符 |
\x{hhhh} |
可变长度 Unicode |
\p{X} |
匹配指定 Unicode 属性 |
\P{X} |
非指定 Unicode 属性 |
\N{name} |
匹配命名 Unicode 字符 |
\X |
字素簇(Grapheme Cluster) |
其他特殊字符¶
不太常用可以了解一下。
| 元字符 | 含义 |
|---|---|
\Q...\E |
将内容转为字面量 |
\k |
命名反向引用 |
\0ooo |
八进制字符 |
正则表达式字符集合(Set Expressions)¶
表示一个集合内容。
| 表达式 | 含义 |
|---|---|
[abc] |
匹配 a、b、c 任一字符 |
[^abc] |
排除字符集 a、b、c |
[A-Z] |
范围匹配 A-Z |
[\u0000-\U0010ffff] |
所有 Unicode 字符 |
正则表达式量词(Quantifiers)¶
用于控制匹配次数。
贪婪量词(默认)¶
在能匹配成功的前提下尽量多匹配。
| 表达式 | 含义 |
|---|---|
* |
0 次或多次匹配 |
+ |
1 次或多次匹配 |
? |
0 或 1 次匹配 |
{n} |
恰好匹配 n 次 |
{n,} |
至少匹配 n 次 |
{n,m} |
n 到 m 次匹配 |
.* |
匹配任意字符(除了换行) |
非贪婪量词(Lazy)¶
在能匹配成功的前提下尽量少匹配。
| 表达式 | 含义 |
|---|---|
*? |
最少匹配 0 次 |
+? |
最少匹配 1 次 |
?? |
0 或 1 次匹配,优先 0 次 |
{n,m}? |
在范围内最大程度少匹配 |
.*? |
最大程度少匹配 |
占有型量词(Possessive)¶
占有型可以理解为 贪婪 + 锁死回溯 , 回溯: 正则匹配失败后,往回退一步重新匹配。
| 表达式 | 含义 |
|---|---|
*+ |
匹配 0 次或多次,并且一旦匹配就不回溯 |
++ |
匹配 1 次或多次,并且一旦匹配就不回溯 |
?+ |
匹配 0 或 1 次,并且一旦选择就不回溯 |
{n,m}+ |
匹配 n~m 次(通常先按贪婪取尽可能多),并且不回溯 |
正则表达式分组与操作符(Operators)¶
| 表达式 | 含义 |
|---|---|
(pattern) |
捕获分组,将括号看成一个整体返回 |
(?:pattern) |
非捕获分组,匹配 pattern 但不获取匹配结果 |
(?=pattern) |
正向肯定预查(正向前瞻) |
(?!pattern) |
正向否定预查(负向前瞻) |
(?<=pattern) |
反向肯定预查(正向后顾) |
(?<!pattern) |
反向否定预查(负向后顾) |
(?=pattern) 和 (?!pattern) 解析:
| Bash | |
|---|---|
(?<=pattern) 和 (?<!pattern) 解析:
| Bash | |
|---|---|
配合 | {} 使用:
| Bash | |
|---|---|
正则表达式匹配模式(Mode)¶
模式修饰符(Flags)¶
| 标志 | 含义 |
|---|---|
i |
忽略大小写 |
m |
多行模式(^ 和 $ 按行匹配) |
s |
点号匹配换行(DOTALL) |
x |
允许空格和注释 |
行内修饰符(Inline Flags)¶
| 表达式 | 含义 |
|---|---|
(?i) |
开启忽略大小写 |
(?-i) |
关闭忽略大小写 |
(?i)abc |
全局模式,整个表达式生效 |
(?i:abc) |
局部模式,仅在括号内生效 |
(?s).* |
可以换匹配全部内容,包含存在换行的字符串 |
注意: (?i)abc 直接写表示全局模式(对整个表达式生效), (?i:abc) 为局部模式,仅在当前括号生效。
常用正则表达式¶
匹配 URL:
| Bash | |
|---|---|
匹配 IP 地址:
匹配邮箱:
| Bash | |
|---|---|
匹配中文:
| Bash | |
|---|---|