正则表达式¶
1 量词¶
字符 | 匹配规则 | 等价 |
---|---|---|
. |
匹配任一个字符 | |
? | 匹配0-1次 | {0-1} |
* |
匹配0次以上 | {0,} |
+ |
匹配1次以上 | {1,} |
{n} | 匹配n次 | |
{n,} | 匹配至少n次 | |
{n,m} | 匹配n-m次 |
2 ^和$首尾控制符,[^]
否定¶
^
指定开头$
指定结尾[^]
与[]
相反,表示除了在[]
内的都可以
3 集合和范围¶
由[]
包裹的字符集,表示可以匹配其中任意字符
- `a[bcd]e`:表示可以匹配abe、ace、ade
- `a[b-d]e`:和上面一致
- `a[bcd]{2}e`:匹配以a开头、e结尾,中间由bcd其中2个字符组合,字符可以相同,如匹配abbe、adce
4 () 组¶
由 () 包裹的字符是一个整体,如 (abc)12
, 会匹配 abc12
, 而不会匹配 bc12
组还能细分为捕获组和非捕获组,语法区别就是非捕获组需要在组左括号后加上`?:`,功能上的不同是捕获组可以使用\1,\2,...,\n来使用捕获组捕获的内容,而非捕获组不能
- 捕获组:`(字符)`
- 非捕获组:`(?:字符)`
title: 组可以结合量词一起使用
- `abcd(efg)`,只会匹配abcdefg
- `abcd(efg)?`,会匹配abcd或者abcdefg
- `<(h1)>[a-z]*</\1>`,会匹配`<h1>title</h1>`
title: 捕获组的使用
- `abcd(efg)\1`,会匹配abcdefgefg,`\1`表示第一个捕获组,也就是efg
- `(red)=(green)=\2\1`,匹配red=green=greenred
5 |或¶
|
就是或者的意思,如 (a|b)12
, 即可以匹配 a12
, 也可以匹配 b12
6 转义序列¶
简写 | 描述 | 等价 |
---|---|---|
. | 除换行符外的所有字符 | [^\n] |
\w | 匹配所有字母数字 | [a-zA-Z0-9_] |
\W | 匹配所有非字母数字,即符号 | [^\w] |
\d | 匹配数字 | [0-9] |
\D | 匹配非数字 | [^\d] |
\s | 匹配所有空格字符 | [\t\n\f\r\p{Z}] |
\S | 匹配所有非空格字符 | [^\s] |
\f | 匹配一个换页符 [form feed] |
|
\n | 匹配一个换行符 [newline] |
|
\r | 匹配一个回车符 [return] |
|
\t | 匹配一个制表符 [tab] |
|
\v | 匹配一个垂直制表符 | |
\p | 匹配 CR/LF , 用来匹配 DOS 行终止符 |
\r\n |
7 模式修正符 i、g、m¶
i
忽略大小写g
全局搜索,匹配所有满足的字符m
多行匹配,用于匹配行首行尾时,每一行都可以去匹配
8 案例¶
8.1 匹配注释¶
^\s*//[\s\S]*?\n
:删除独占单行的注释 (//注释)
8.2 匹配空行¶
^\s*(?=\r?$)\n
9 参考资料¶
- https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md
- https://perldoc.perl.org/perlre#Regular-Expressions