正则表达式速查
这页适合作为“正则表达式从看得懂到写得稳”的速查表。正则的难点往往不在语法本身,而在于:你是否知道该用到什么程度、该怎么调试、什么时候应该停下来改用更可读的解析方式。
推荐掌握顺序
建议按下面顺序学习:
- 先记住字符类、量词、分组、边界
- 再掌握常见模式和替换
- 然后学习前瞻、后顾等断言
- 最后再处理跨语言差异和复杂表达式优化
先把“匹配什么”和“为什么多匹配 / 少匹配”搞明白,比上来就写复杂断言更重要。
基础语法
| 语法 | 说明 | 示例 |
|---|---|---|
. | 任意字符(除换行) | a.c → abc, a1c |
\d | 数字 [0-9] | \d+ → 123 |
\w | 字母数字下划线 [a-zA-Z0-9_] | \w+ → hello_1 |
\s | 空白字符 | a\sb → a b |
\D \W \S | 上述取反 | |
^ | 行首 | ^Hello |
$ | 行尾 | world$ |
\b | 单词边界 | \bword\b |
量词
| 语法 | 说明 |
|---|---|
* | 0 次或多次 |
+ | 1 次或多次 |
? | 0 次或 1 次 |
{n} | 恰好 n 次 |
{n,} | 至少 n 次 |
{n,m} | n 到 m 次 |
*? +? | 非贪婪匹配 |
分组与引用
(abc) 捕获组
(?:abc) 非捕获组
(?<name>x) 命名捕获组
\1 反向引用第 1 组
(a|b) 或
断言(Lookaround)
(?=abc) 正向前瞻:后面是 abc
(?!abc) 负向前瞻:后面不是 abc
(?<=abc) 正向后顾:前面是 abc
(?<!abc) 负向后顾:前面不是 abc
常用模式
邮箱
[\w.+-]+@[\w-]+\.[\w.]+
URL
https?://[\w\-._~:/?#\[\]@!$&'()*+,;=%]+
IP 地址
\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
中文字符
[\u4e00-\u9fa5]+
手机号(中国大陆)
1[3-9]\d{9}
HTML 标签
<[^>]+>
日期(YYYY-MM-DD)
\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])
各语言示例
JavaScript
const regex = /\d+/g;
const matches = "abc123def456".match(regex); // ['123', '456']
// 命名捕获组
const dateRegex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
const { groups } = "2026-02-27".match(dateRegex);
// groups.year === '2026'
Python
import re
matches = re.findall(r'\d+', 'abc123def456') # ['123', '456']
# 替换
result = re.sub(r'\s+', ' ', 'hello world') # 'hello world'
PowerShell
# 匹配
'abc123' -match '\d+'
$Matches[0] # '123'
# 替换
'hello world' -replace '\s+', ' ' # 'hello world'
在线工具
| 工具 | 说明 |
|---|---|
| regex101 | 最强正则测试工具,支持多语言 |
| regexr | 可视化正则编辑器 |
| RegExper | 正则可视化图表 |
常见问题
明明匹配到了,但结果不对
高频原因通常包括:
.*太贪婪- 忘了加边界,例如
\b - 多行 / 单行模式与预期不一致
- 在字符串字面量里少写或多写了转义
在线能用,代码里失效
这通常是因为不同语言的正则实现存在细节差异,或者字符串本身需要二次转义。例如 JavaScript 和 Python 在字面量写法上就不完全一样。
正则越来越长,自己都看不懂
这往往说明表达式已经超出“易维护”的范围。可以考虑:
- 拆成多段处理
- 增加注释或命名分组
- 对结构化数据改用真正的解析器,而不是只靠正则硬匹配
编写建议
- 先写最小可用版本,再逐步加限制条件
- 在
regex101这类工具里用多个正例和反例一起验证 - 处理用户输入时,注意性能和 ReDoS 风险,不要写无限回溯型表达式
延伸阅读
参考链接
- regex101 — 在线测试
- MDN 正则表达式 — JavaScript 正则
- Python re 模块 — 官方文档