正则表达式语法速查表
摘要
本页面通过汇总正则表达式指南中的内容,提供了一份全面的正则表达式语法速查表。如果你需要了解某个特定主题的更多信息,可以点击相应标题的链接访问完整文章,或直接查阅指南。
字符类
字符类(Character classes)用于区分不同种类的字符,例如,区分字母和数字。
| 字符 | 含义 |
|---|---|
[xyz] [a-c] | 字符类:匹配方括号中任意一个字符。你可以使用连字符 - 来指定一个字符范围。但如果连字符出现在方括号内的开头或结尾,它将被视为一个普通的连字符,而不是表示范围。 例如, [abcd] 和 [a-d] 效果相同。它们都能匹配 "brisket" 中的 "b" 和 "chop" 中的 "c"。 |
[^xyz] [^a-c] | 反义字符类:匹配任何不在方括号内的字符。你同样可以使用连字符来指定范围。如果连字符出现在 ^ 之后或方括号的末尾,它将被视为一个普通的连字符。例如, [^abc] 和 [^a-c] 效果相同。它们会匹配 "bacon" 中的 "o" 和 "chop" 中的 "h"。 |
. | 通配符:匹配除换行符(\n, \r, \u2028 或 \u2029)之外的任何单个字符。如果启用了 dotAll (s) 标志,它也将匹配换行符。在字符类 [] 内部,点号 . 会失去其特殊含义,只匹配一个普通的点。 |
\d | 数字:匹配任何数字(阿拉伯数字)。等同于 [0-9]。 |
\D | 非数字:匹配任何不是数字的字符。等同于 [^0-9]。 |
\w | 单词字符:匹配任何基本拉丁字母表中的字母数字字符,包括下划线。等同于 [A-Za-z0-9_]。 |
\W | 非单词字符:匹配任何不是基本拉丁字母表中单词字符的字符。等同于 [^A-Za-z0-9_]。 |
\s | 空白字符:匹配单个空白字符,包括空格、制表符、换页符、换行符和其他 Unicode 空白符。 |
\S | 非空白字符:匹配除空白符以外的任何单个字符。 |
\ | 转义字符:表示其后的字符应被特殊处理或“转义”。 |
| `x | y` |
断言
断言(Assertions)包括边界(表示行和单词的开始和结束)以及其他表示某种匹配可能性的模式。
边界类断言
| 字符 | 含义 |
|---|---|
^ | 输入开头:匹配输入的开始。如果启用了 multiline (m) 标志,它也会匹配紧跟在换行符之后的位置。 |
$ | 输入结尾:匹配输入的结尾。如果启用了 multiline (m) 标志,它也会匹配紧接在换行符之前的位置。 |
\b | 单词边界:匹配一个单词的边界。这是一个单词字符与非单词字符之间的位置。 |
\B | 非单词边界:匹配一个非单词边界。这是一个前后字符类型相同的位置。 |
其他断言
| 字符 | 含义 |
|---|---|
x(?=y) | 先行断言:仅当 "x" 后面紧跟着 "y" 时,才匹配 "x"。 |
x(?!y) | 负向先行断言:仅当 "x" 后面不是 "y" 时,才匹配 "x"。 |
(?<=y)x | 后行断言:仅当 "x" 前面是 "y" 时,才匹配 "x"。 |
(?<!y)x | 负向后行断言:仅当 "x" 前面不是 "y" 时,才匹配 "x"。 |
分组与反向引用
分组(Groups)与反向引用(backreferences)用于将表达式字符组合在一起,并可以引用这些分组的匹配结果。
| 字符 | 含义 |
|---|---|
(_x_) | 捕获组:匹配 _x_ 并“记住”这个匹配。 |
(?<Name>x) | 命名捕获组:匹配 "x" 并将其存储在返回匹配项的 groups 属性下,名称由 <Name> 指定。 |
(?:_x_) | 非捕获组:匹配 "x" 但不记住匹配。 |
\_n_ | 反向引用:匹配第 n 个捕获组所匹配的相同子字符串。 |
\k<Name> | 命名反向引用:反向引用由 <Name> 指定的命名捕获组最后匹配的子字符串。 |
量词
量词(Quantifiers)用于指定要匹配的字符或表达式的数量。
| 字符 | 含义 |
|---|---|
_x_* | 匹配前一项 "x" 0 次或多次。 |
_x_+ | 匹配前一项 "x" 1 次或多次。 |
_x_? | 匹配前一项 "x" 0 次或 1 次。 |
_x_{_n_} | 精确匹配前一项 "x" n 次。 |
_x_{_n_,} | 匹配前一项 "x" 至少 n 次。 |
_x_{_n_,_m_} | 匹配前一项 "x" 至少 n 次,最多 m 次。 |
_x_*? 等 | 非贪婪量词:默认量词是“贪婪的”,会尽可能多地匹配。在其后加上 ? 会使其变为“非贪婪的”,即在找到第一个匹配后立即停止。例如,对于字符串 "some <foo> <bar> new </bar> </foo> thing": - /<.*>/ (贪婪) 会匹配 "<foo> <bar> new </bar> </foo>"- /<.*?>/ (非贪婪) 会匹配 "<foo>" |