正则表达式是文本处理的瑞士军刀——验证表单、提取数据、搜索替换,没有比它更强的工具。学会它,一辈子受益。
基础元字符
| 符号 | 含义 | 示例匹配 |
| . | 任意单个字符 | a.c → abc, a1c |
| \d | 数字 | \d\d\d → 123, 456 |
| \w | 字母数字下划线 | \w+ → hello_world |
| \s | 空白字符 | a\sb → "a b" |
| [abc] | 字符组,匹配 a/b/c | [aeiou] → 元音字母 |
| [^abc] | 取反,不匹配 a/b/c | [^0-9] → 非数字 |
量词
| 符号 | 含义 |
| * | 0 次或多次 |
| + | 1 次或多次 |
| ? | 0 次或 1 次 |
| {n} | 恰好 n 次 |
| {n,m} | n 到 m 次 |
实战 5 例
# 1. 验证手机号(中国大陆)
^1[3-9]\d{9}$
# 2. 提取邮箱地址
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
# 3. 匹配 URL
https?://[\w.-]+(:\d+)?(/[\w./-]*)?
# 4. 提取 HTML 标签内容
>([^<]+)<
# 5. 验证日期格式 YYYY-MM-DD
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
分组和捕获
# 匹配 "2026-05-07",分别捕获年月日
(\d{4})-(\d{2})-(\d{2})
# Python 中可以用 group(1) group(2) group(3) 获取
# 等价于 \1 \2 \3 在替换中引用
零宽断言(进阶)
| 符号 | 含义 | 示例 |
| (?=...) | 正向前瞻 | \d+(?=元) 匹配"50元"中的50 |
| (?<=...) | 正向后顾 | (?<=¥)\d+ 匹配"¥50"中的50 |
| (?!...) | 负向前瞻 | \d+(?!元) 匹配后不跟"元"的数字 |
练习是关键
推荐在 regex101.com 上实操练习,它有交互式解释器、多语言支持和测试用例功能。每天练 2 个正则,一周后你就能随手写出匹配规则了。