正则表达式速查手册与实战技巧
正则表达式(Regular Expression,简称 Regex)是开发者工具箱中最强大也最令人头疼的武器之一。说它强大,是因为它能用短短几行模式匹配完成复杂的文本处理任务;说它头疼,是因为它的语法晦涩难懂,写出的正则表达式往往连自己几天后都看不懂。
本文整理了正则表达式的核心语法速查表和实战技巧,配合在线练习工具使用,帮你从入门到精通。
一、正则表达式基础
什么是正则表达式
正则表达式是一种描述文本模式的语法规则,可以用来:
- 验证:检查字符串是否符合某种格式(如邮箱、手机号)
- 搜索:在文本中查找符合模式的内容
- 替换:将符合模式的文本替换为新内容
- 提取:从文本中提取需要的信息
几乎所有编程语言和文本编辑器都支持正则表达式,掌握它能极大提升文本处理效率。
二、核心语法速查表
1. 字符类
.- 匹配除换行符外的任意字符\d- 匹配数字 [0-9]\D- 匹配非数字\w- 匹配单词字符 [a-zA-Z0-9_]\W- 匹配非单词字符\s- 匹配空白字符(空格、制表符、换行等)\S- 匹配非空白字符[abc]- 匹配字符集中的任意一个字符[^abc]- 匹配不在字符集中的任意字符[a-z]- 匹配范围内的字符
2. 量词
*- 匹配 0 次或多次+- 匹配 1 次或多次?- 匹配 0 次或 1 次{n}- 精确匹配 n 次{n,}- 匹配至少 n 次{n,m}- 匹配 n 到 m 次
3. 位置锚点
^- 匹配字符串开头$- 匹配字符串结尾- 匹配单词边界\B- 匹配非单词边界
4. 分组与引用
(abc)- 捕获分组,匹配 abc 并记住匹配内容(?:abc)- 非捕获分组,只匹配不记住- 反向引用第一个分组的匹配内容(?<name>abc)- 命名分组
5. 断言
(?=abc)- 正向先行断言,后面必须是 abc(?!abc)- 负向先行断言,后面不能是 abc(?<=abc)- 正向后行断言,前面必须是 abc(?<!abc)- 负向后行断言,前面不能是 abc
6. 其他
|- 或运算符,匹配左边或右边\- 转义特殊字符flags- 修饰符:g(全局)、i(忽略大小写)、m(多行)、s(点匹配换行)
三、常用正则表达式模板
1. 邮箱验证
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
这是一个基础的邮箱验证正则。注意:完全符合 RFC 5322 标准的邮箱正则非常复杂,实际使用中这个基础版本通常足够。
2. 手机号验证(中国大陆)
^1[3-9]\d{9}$
匹配以 1 开头,第二位为 3-9,总共 11 位的手机号。
3. URL 验证
https?:\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\/\S*)?$
匹配 http 或 https 开头的 URL。根据需求可调整严格程度。
4. IPv4 地址
^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
5. 日期格式(YYYY-MM-DD)
^\d{4}-\d{2}-\d{2}$
6. HTML 标签
<([a-z]+)>[\s\S]*?<\/>
匹配成对的 HTML 标签。注意:用正则解析 HTML 不是好主意,复杂场景请使用 DOM 解析器。
7. 中文字符
[一-龥]
匹配常见的中文字符(基本多文种平面中的汉字)。
四、实战技巧
1. 贪婪 vs 非贪婪
默认情况下,* 和 + 是贪婪匹配,会尽可能多地匹配字符。在后面加上 ? 就变成非贪婪匹配,尽可能少地匹配。
例如:对于字符串 <div>hello</div><div>world</div>:
- 贪婪模式
<div>.*<\/div>会匹配整个字符串 - 非贪婪模式
<div>.*?<\/div>只会匹配第一个 div
2. 写正则的步骤
- 先明确要匹配的模式,用自然语言描述出来
- 拆分模式,找出其中的固定部分和可变部分
- 逐步构建正则,每一步都测试验证
- 考虑边界情况和异常输入
- 添加注释,方便日后维护
3. 调试技巧
- 使用在线正则测试工具实时调试
- 从简单的测试用例开始,逐步增加复杂度
- 验证不匹配的情况,确保不会误匹配
- 使用分组捕获来提取关键信息,便于调试
五、性能优化
正则表达式如果写得不好,可能导致严重的性能问题(回溯风暴)。以下是一些优化建议:
- 避免嵌套量词:如
(a+)*容易导致灾难性回溯 - 使用具体字符替代点号:能用
[^"]*就不用.*? - 提前失败:将容易失败的条件放在前面,减少回溯
- 使用非捕获分组:不需要反向引用时用
(?:)减少内存开销 - 考虑是否需要正则:简单的字符串操作用字符串方法可能更快
六、学习资源与工具
在线练习工具
- 正则表达式测试工具 - 实时测试正则表达式,高亮显示匹配结果
- Regex101 - 支持分步解释和调试,学习正则的好地方
- RegExr - 可视化正则表达式编辑器,有详细的语法参考
学习建议
- 从简单的开始:先学会匹配数字、字母这些基本模式
- 边学边练:每个语法点都找实际例子练习
- 阅读别人写的正则:分析好的正则是怎么写的
- 不要过度使用:能用字符串方法解决的就不要上正则
- 写注释:复杂正则一定要加注释,不然自己都看不懂
总结
正则表达式是一把双刃剑:用得好可以极大提升效率,用不好则可能带来性能问题和维护噩梦。掌握核心语法、理解工作原理、遵循最佳实践,是用好正则的关键。
希望这份速查手册能成为你日常开发中的好帮手。建议收藏本文,遇到正则问题时随时查阅。也可以用 DevToolHub 的正则测试工具进行实时练习,熟能生巧。