1. 字符
正则表达式(Regular Expression)是一种文本模式,包括普通字符(如 a 到 z 之间的字母)和特殊字符(称为“元字符”)。
正则表达式使用单个字符串来描述用于匹配某个句法规则的字符串。许多程序设计语言都支持利用正则表达式进行字符串操作。
1.1. 常用符号及描述
常用符号 |
描述 |
示例 |
---|---|---|
\ |
转义 |
|
^ |
匹配输入字符串的开始位置 |
|
$ |
匹配输入字符串的结束位置 |
|
. |
匹配除换行符( |
|
* |
匹配前面的子表达式 零次 或多次 |
|
+ |
匹配前面的子表达式 一次 或多次 |
|
? |
匹配前面的子表达式 零次 或 一次 |
|
{n} |
匹配 n 次 |
|
{n,} |
至少匹配 n 次 |
|
{n,m} |
匹配 n 到 m 次 |
|
*?, +?, ??, {n}?, {n,}?, {n,m}? |
非贪婪匹配 |
对于字符串 oooo, |
(pattern) |
匹配 pattern 并获取这一匹配 |
|
(?:pattern) |
非获取匹配 |
|
(?=pattern) |
正向肯定预查(Look Ahead Positive Assertion),非获取匹配 |
|
(?!pattern) |
正向否定预查(Look Ahead Negative Assertion),非获取匹配 |
|
(?<=pattern) |
反向肯定预查(Look Behind Positive Assertion),非获取匹配 |
|
(?<!pattern) |
反向否定预查(Look Behind Negative Assertion),非获取匹配 |
|
x|y |
匹配 x 或 y |
|
[xyz] |
字符集合,匹配所包含的任意一个字符 |
|
[^xyz] |
负值字符集合,匹配未包含的任意字符 |
|
[a-z] |
匹配任意小写字母 |
|
[^a-z] |
匹配非小写字母 |
|
\d |
匹配一个数字字符,等价于 |
|
\D |
匹配一个非数字字符,等价于 |
|
\n |
匹配一个换行符 |
|
\r |
匹配一个回车符 |
|
\s |
匹配任何空白字符,等价于 |
|
\S |
匹配任何非空白字符,等价于 |
|
\t |
匹配一个制表符 |
|
\w |
匹配字母、数字、下划线,等价于 |
|
\W |
匹配非字母、数字、下划线,等价于 |
|
\b |
匹配 |
|
\B |
匹配 |
|
\num |
后向引用(Back Reference),对第 |
|
匹配邮箱的例子:
\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b
Note
非贪婪匹配尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
(pattern)
获取式匹配可以从产生的 Matches 集合(Groups)得到,要匹配圆括号字符,请使用 \(
或 \)
。
Note
^
$
\b
\B
等属于 Anchor 类字符,用于限定匹配位置,不占用实际字符宽度。
比如 abc---123
可以理解为 ^abc---123$
或 \ba\Bb\Bc\b---\b1\B2\B3\b
。
Tip
放在中括号 []
里面的时候, .
+
*
等特殊字符可以不用转义。
Tip
不包含某个字符串的行: ^((?!target_str).)*$
,等效于 grep -v target_str
。
Tip
匹配中文: [\u4e00-\u9fa5]
。
匹配双字节字符(包括中文): [^\x00-\xff]
。
Tip
VS Code 在使用正则进行查找替换的时候,替换结果中使用 $num
来引用所获取的匹配组( num
从 1 开始), $0
表示完整的原始字符串。
VS Code 可以使用 \u
\U
\l
\L
四种字符来改变匹配组的大小写:
\u
将匹配组的第一个字符转换为大写\l
将匹配组的第一个字符转换为小写\U
将匹配组的所有字符转换为大写\L
将匹配组的所有字符转换为小写\u\u\u$1
将第一个匹配组的前三个字符转为大写\l\U$1
将第一个匹配组的第一个字符转为小写,其余字符转为大写
1.2. 参考资料
Regular expression
Regular Expression Language - Quick Reference
正则表达式
正则表达式在线测试及常用正则表达式
在 Visual Studio 中使用正则表达式
VS Code now supports changing the case of regex matching groups while doing a find/replace