正则表达式速查表

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

原理解析

正则表达式是描述「字符串模式」的迷你语言:普通字符逐字匹配,元字符赋予特殊含义——. 匹配任意单字符,* 重复前项 0 次以上,+ 1 次以上,? 0 或 1 次,^/$ 锚定首尾,\d \w \s 匹配数字/词/空白。

贪婪量词(* +)会尽可能多匹配,加 ? 变懒惰(*?);括号用于分组与捕获,反向引用 \1 复用已捕获内容。危险点是「灾难性回溯」——某些模式在坏输入下复杂度指数爆炸,须避免在用户输入上套用嵌套量词。

符号含义
.任意单个字符(默认不含换行)
\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+)+ 匹配失败时会指数级回溯。尽量用明确字符类、锚点 ^ $ 缩小范围,必要时用占有量词或原子组。