正则表达式速查表

正则表达式(Regex)语法速查:元字符、字符类、锚点、量词、分组与前后行断言,附中文说明,调试正则时快速查阅。

符号含义
.任意单个字符(默认不含换行)
\d数字 [0-9]
\D非数字
\w单词字符 [A-Za-z0-9_]
\W非单词字符
\s空白字符(空格/制表/换行)
\S非空白字符
^字符串或行开头
$字符串或行结尾
\b单词边界
\B非单词边界
*前一项 0 次或多次(贪婪)
+前一项 1 次或多次(贪婪)
?前一项 0 或 1 次
{n}恰好 n 次
{n,}至少 n 次
{n,m}n 到 m 次
(...)捕获组
(?:...)非捕获组
[...]字符类(匹配其中任一)
[^...]取反字符类
|或(分支)
\1反向引用第 1 个捕获组
(?=...)正向先行断言
(?!...)负向先行断言
(?<=...)正向后行断言
(?<!...)负向后行断言

常见问题

贪婪量词与非贪婪量词有什么区别?

贪婪(*、+)会尽可能多匹配;在其后加 ?(*?、+?)变为惰性,尽可能少匹配。例如对 "<a>1</a><a>2</a>",<.*> 会贪心匹配到最后一个 </a>,而 <.*?> 只匹配到第一个。

如何让 . 也能匹配换行符?

默认 . 不匹配换行。可启用 dotall 模式(JS 用 s 标志 /[sS]/,或 PHP/Python 的 DOTALL),或用 [sS] 这类写法兼容所有引擎。

字符类和分组有什么不同?

[abc] 只匹配单个字符(a、b 或 c);(abc) 是一个整体序列,匹配字面子串 "abc",并可作为捕获组整体量化(如 (abc)+)。

写正则要注意什么性能问题?

警惕灾难性回溯:避免嵌套量词如 (a+)+ 匹配失败时会指数级回溯。尽量用明确字符类、锚点 ^ $ 缩小范围,必要时用占有量词或原子组。