Skip to content

正则表达式语法速查表

摘要

本页面通过汇总正则表达式指南中的内容,提供了一份全面的正则表达式语法速查表。如果你需要了解某个特定主题的更多信息,可以点击相应标题的链接访问完整文章,或直接查阅指南。


字符类

字符类(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非空白字符:匹配除空白符以外的任何单个字符。
\转义字符:表示其后的字符应被特殊处理或“转义”。
`xy`

断言

断言(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 属性下,名称由 &lt;Name&gt; 指定。
(?:_x_)非捕获组:匹配 "x" 但不记住匹配。
\_n_反向引用:匹配第 n 个捕获组所匹配的相同子字符串。
\k<Name>命名反向引用:反向引用由 &lt;Name&gt; 指定的命名捕获组最后匹配的子字符串。

量词

量词(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>"