正则表达式是文本处理的瑞士军刀——验证表单、提取数据、搜索替换,没有比它更强的工具。学会它,一辈子受益。

基础元字符

符号含义示例匹配
.任意单个字符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 个正则,一周后你就能随手写出匹配规则了。