2026 通用 正则表达式 语法
所有主流语言(PCRE 标准)通用的核心匹配规则。
一、字符匹配与字符类 (Character Classes)
| 语法 | 描述 | 示例 |
|---|---|---|
. | 匹配除换行符(\n)之外的任意单个字符。 | a.c 匹配 "abc", "a1c" |
[abc] | 字符集合,匹配方括号内包含的任意一个字符。 | [aeiou] 匹配任意元音字母 |
[^abc] | 否定字符集合,匹配未包含在方括号内的任意字符。 | [^0-9] 匹配非数字字符 |
[a-z] | 字符范围,匹配指定范围内的任意字符。 | [A-Za-z0-9] 匹配所有字母和数字 |
\d | 匹配任意数字,等价于 [0-9]。 | \d\d 匹配 "12", "99" |
\D | 匹配任意非数字,等价于 [^0-9]。 | \D 匹配 "A", "-", " " |
\w | 匹配任意字母、数字或下划线(单词字符),等价于 [a-zA-Z0-9_]。 | \w+ 匹配 "var_1" |
\W | 匹配任意非单词字符,等价于 [^a-zA-Z0-9_]。 | \W 匹配 "!", "@", " " |
\s | 匹配任意空白字符(空格、制表符、换行等),等价于 [ \f\n\r\t\v]。 | a\sb 匹配 "a b", "a\tb" |
\S | 匹配任意非空白字符。 | \S+ 匹配连续的非空白文本 |
\ | 转义字符,用于匹配保留字(如 \*, \., \\)。 | \. 匹配字面的点号 "." |
二、量词 (Quantifiers) —— 贪婪与非贪婪
默认情况下,正则量词是贪婪的(Greedy),会尽可能多地匹配字符。
在量词后加 ? 即可变为非贪婪/懒惰(Lazy)模式,尽可能少地匹配。
| 贪婪模式 | 非贪婪模式 | 描述 | 示例 |
|---|---|---|---|
* | *? | 匹配前一个字符 0 次或无限次。 | a* 匹配 "", "a", "aaa" |
+ | +? | 匹配前一个字符 1 次或无限次。 | a+ 匹配 "a", "aaa" |
? | ?? | 匹配前一个字符 0 次或 1 次(用于可选字符)。 | https? 匹配 "http", "https" |
{n} | - | 匹配前一个字符精确匹配 n 次。 | \d{3} 匹配 3 个数字 |
{n,} | {n,}? | 匹配前一个字符至少 n 次。 | \w{6,} 匹配 6 个以上字符 |
{n,m} | {n,m}? | 匹配前一个字符至少 n 次,至多 m 次。 | \d{3,5} 匹配 3 到 5 个数字 |
三、边界断言 (Anchors)
边界不匹配具体的字符,而是匹配字符的位置。
| 语法 | 描述 | 示例 |
|---|---|---|
^ | 匹配字符串的开头。 | ^abc 仅匹配以 "abc" 开头的文本 |
$ | 匹配字符串的结尾。 | xyz$ 仅匹配以 "xyz" 结尾的文本 |
\b | 匹配单词边界(单词与非单词字符之间的位置)。 | \bword\b 匹配独立的 "word" |
\B | 匹配非单词边界。 | \Bword 匹配 "password" 中的 "word" |
四、分支与分组 (Alternation & Grouping)
| 语法 | 描述 | 示例 |
|---|---|---|
| | 逻辑或(分支),匹配左右任意一个表达式。 | cat|dog 匹配 "cat" 或 "dog" |
(...) | 捕获分组,将多个字符绑定为一个整体,并提取匹配的内容。 | (abc)+ 匹配 "abcabc" |
(?:...) | 非捕获分组,仅作为整体进行匹配或应用量词,但不提取到内存中,提升性能。 | (?:http|ftp)://` 不捕获协议名 |
\n | 反向引用(n 为数字1-99),引用前面第 n 个捕获组匹配到的文本。 | ([a-z])\1 匹配连续相同字母如 "aa", "bb" |
五、零宽断言 (Lookaround)
用于匹配特定的位置,要求该位置的前面或后面满足某个条件,但断言本身不消耗字符(不包含在最终匹配结果中)。
| 语法 | 名称 | 描述 | 示例 |
|---|---|---|---|
(?=...) | 正向先行断言 | 当前位置的右侧必须匹配 ... | Windows(?= 10| 11) 匹配 "Windows"(仅当后面是 10 或 11 时) |
(?!...) | 负向先行断言 | 当前位置的右侧不能匹配 ... | \d{3}(?!\d) 匹配 3 个数字(且后面不再跟数字) |
(?<=...) | 正向后发断言 | 当前位置的左侧必须匹配 ... | (?<=\$)\d+ 匹配数字(仅当且前面是 "") |
(?<!...) | 负向后发断言 | 当前位置的左侧不能匹配 ... | (?<!-)\d+ 匹配数字(仅当且前面不能是 "-") |