正则表达式速查表
实用的正则表达式参考手册,包含语法说明、常用模式和实际案例。从基础到高级的前瞻断言和命名分组。
为什么正则表达式在 2026 年依然重要
正则表达式仍然是验证、搜索和转换文本最高效的方式。尽管有更新的替代方案如解析器组合子和 PEG 语法,但正则表达式无处不在——表单验证、日志解析、IDE 查找替换、grep、sed 和数据管道。
挑战在于记住语法。这个速查表涵盖了 90% 实际场景中需要的模式,每个例子都可以在我们的 正则表达式测试工具 中立即测试。
基础语法参考
字符类
. 任意字符(换行符除外)
\d 数字 [0-9]
\w 单词字符 [a-zA-Z0-9_]
\s 空白字符(空格、制表符、换行)
\D 非数字
\W 非单词字符
\S 非空白字符
[abc] a、b 或 c 中的任意一个
[^abc] 非 a、b、c
[a-z] 任意小写字母
[a-zA-Z] 任意字母
量词
* 0 次或多次(贪婪)
+ 1 次或多次(贪婪)
? 0 次或 1 次
{3} 恰好 3 次
{3,} 3 次或更多
{3,6} 3 到 6 次之间
*? 0 次或多次(懒惰)
+? 1 次或多次(懒惰)
锚点和边界
^ 字符串开头(配合 /m 标志匹配行首)
$ 字符串结尾(配合 /m 标志匹配行尾)
\b 单词边界
\B 非单词边界
你一定会用到的常用模式
邮箱验证
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
这能匹配大多数有效的邮箱地址。对于 RFC 5322 完全合规,模式会复杂得多——但对于实际的表单验证,这个已经够用了。用 正则表达式测试工具 验证你的输入。
URL 提取
https?://[^\s<>"{}|\\^\`\[\]]+
匹配 HTTP 和 HTTPS URL,不会过度匹配。适用于从文本内容中提取链接。
手机号码(中国大陆)
^1[3-9]\d{9}$
匹配中国大陆 11 位手机号码,以 1 开头,第二位为 3-9。
IPv4 地址
^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$
验证每个八位字节在 0-255 范围内。交替分支处理了简单的 \d{1,3} 无法满足的范围约束。
日期格式
# ISO 8601: 2026-04-05
^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$
# 中文日期: 2026年04月05日
^\d{4}年(?:0[1-9]|1[0-2])月(?:0[1-9]|[12]\d|3[01])日$
十六进制颜色值
# 匹配 #RGB、#RRGGBB 和 #RRGGBBAA
^#(?:[0-9a-fA-F]{3,4}){1,2}$
捕获组和反向引用
捕获组让你可以提取匹配的部分并重新组织文本:
# 交换姓和名
查找: (\w+)\s+(\w+)
替换: $2, $1
# 结果: "张 三" → "三, 张"
命名分组
命名分组提高了可读性,特别是在复杂模式中:
# 命名捕获 (JavaScript)
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
# JavaScript 中访问
const match = "2026-04-05".match(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/);
console.log(match.groups.year); // "2026"
非捕获分组
当需要分组但不需要捕获时,使用 (?:...)。这样更快,也不会污染捕获列表:
# 匹配 "Mr." 或 "Mrs." 或 "Ms.",不捕获称谓
(?:Mr|Mrs|Ms)\.\s+\w+
前瞻和后行断言
这些零宽断言匹配位置但不消耗字符:
# 正向前瞻:匹配 "foo" 仅当后面是 "bar"
foo(?=bar)
# 负向前瞻:匹配 "foo" 后面不是 "bar"
foo(?!bar)
# 正向后行:匹配 "bar" 仅当前面是 "foo"
(?<=foo)bar
# 负向后行:匹配 "bar" 前面不是 "foo"
(?<!foo)bar
实际示例:密码强度验证
# 至少 8 位,包含大写、小写、数字和特殊字符各一个
^(?=.*[a-z])(?=.*[A-Z])(?=.\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
每个前瞻断言强制一个约束条件,但不推进匹配位置。最后的字符类定义了允许的字符和最小长度。
标志(修饰符)
g 全局匹配 — 查找所有匹配项,不仅是第一个
i 不区分大小写
m 多行模式 — ^ 和 $ 匹配行边界
s 单行模式 — . 也匹配换行符
u Unicode 支持(启用 \p{} 类)
x 详细模式 — 允许空白和注释
贪婪 vs 懒惰匹配
默认情况下,量词是贪婪的——它们尽可能多地匹配。加上 ? 使其变为懒惰匹配:
# 输入: <p>你好</p><p>世界</p>
# 贪婪(匹配过多)
<.*> → "<p>你好</p><p>世界</p>"
# 懒惰(匹配最少)
<.*?> → "<p>", 然后 "</p>", 然后 "<p>", 然后 "</p>"
在大多数情况下,提取标签和分隔符时,懒惰匹配才是你想要的。
常见错误
- 不转义特殊字符:使用
\.匹配字面点号,\(匹配字面括号。 - 用正则解析结构化数据:不要用正则表达式解析 HTML 或 JSON。使用专门的解析器。
- 灾难性回溯:嵌套量词如
(a+)+在不匹配的输入上可能导致挂起。使用原子组或占有型量词。 - 忘记锚点:没有
^和$,你的模式会匹配部分字符串。\d+匹配 "abc123"——^\d+$不会。
测试你的正则表达式
在部署正则表达式之前,一定要针对边界情况测试。我们的 正则表达式测试工具 提供实时匹配、分组高亮和替换预览——全部在浏览器中运行。
总结
正则表达式是一个强力工具:正确使用时极其有效,使用不当时非常危险。从简单模式开始,充分测试,只有在需要时才使用更复杂的结构。把这个速查表收藏起来,需要验证模式时就用 正则表达式测试工具。
试试这个工具?
打开工具 →