2026 通用 正则表达式 语法

2026 年 5 月 1 日 星期五
37

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+ 匹配数字(仅当且前面不能是 "-")

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...