为什么正则表达式如此重要
正则表达式(Regular Expression,简称 Regex)是文本处理的瑞士军刀。无论是数据验证、日志分析、代码重构,还是爬虫提取,掌握正则都能让你的效率提升数倍。
然而,正则的语法看起来像"乱码",让很多开发者望而却步。本文通过 10 个最常用的实战模式,帮你快速上手。
1. 邮箱验证
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
解析:
[a-zA-Z0-9._%+-]+— 用户名部分,允许字母、数字和常见符号@— 必须包含 @[a-zA-Z0-9.-]+— 域名部分\.[a-zA-Z]{2,}— 顶级域名,至少 2 个字母
匹配示例:
- ✅
user@example.com - ✅
test.name+tag@domain.cn - ❌
invalid@
2. 手机号验证(中国大陆)
^1[3-9]\d{9}$
解析:
1— 以 1 开头[3-9]— 第二位 3-9\d{9}— 后面 9 位数字
3. 提取 URL
https?://[^\s<>"']+
解析:
https?— http 或 https://— 固定分隔[^\s<>"']+— 非空白、非引号字符
4. IPv4 地址
^(\d{1,3}\.){3}\d{1,3}$
解析:
\d{1,3}— 1-3 位数字\.— 点号分隔- 重复 3 次加最后一组
注意:此模式仅检查格式,不验证数值范围(0-255)。严格验证需要更复杂的表达式。
5. 日期格式匹配
\d{4}[-/]\d{2}[-/]\d{2}
匹配 2026-04-21 或 2026/04/21 格式的日期。
6. 提取 HTML 标签内容
<(\w+)[^>]*>(.*?)</\1>
解析:
<(\w+)— 捕获开始标签名[^>]*>— 标签属性(如有)(.*?)— 非贪婪匹配标签内容</\1>— 反向引用,确保结束标签与开始标签一致
7. 密码强度校验
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$
要求至少 8 位,包含大小写字母、数字和特殊字符。
| 条件 | 正则片段 |
|---|---|
| 至少一个小写字母 | (?=.*[a-z]) |
| 至少一个大写字母 | (?=.*[A-Z]) |
| 至少一个数字 | (?=.*\d) |
| 至少一个特殊字符 | (?=.*[!@#$%^&*]) |
| 至少 8 位 | .{8,} |
8. 去除首尾空白
^\s+|\s+$
在多数编程语言中,可用 replace 去除字符串首尾空白字符。
9. 千分位分隔数字
\B(?=(\d{3})+(?!\d))
解析:
\B— 非单词边界(不在开头插入逗号)(?=(\d{3})+(?!\d))— 正向预查,后面每 3 位数字一组
替换结果:1234567 → 1,234,567
10. 匹配中文字符
[\u4e00-\u9fa5]+
匹配连续的中文字符,范围覆盖常用汉字。
实用技巧总结
- 善用在线测试工具:写正则时,用 正则表达式测试工具 实时验证
- 从简单开始:先写匹配单个案例的正则,再逐步扩展
- 注意贪婪 vs 非贪婪:
.*是贪婪的,.*?是非贪婪的,按需选择 - 使用注释:复杂正则可用
(?#注释)添加行内注释 - 避免过度回溯:嵌套量词如
(a+)+可能导致灾难性回溯
想快速测试正则表达式?试试我们的 正则表达式测试工具,支持实时匹配、分组高亮和常用模式库。
总结
正则表达式并不难,关键是从实际需求出发,逐个掌握常用模式。本文的 10 个模式覆盖了日常开发中 80% 的场景,配合在线工具练习,你很快就能熟练运用。