正则表达式完全指南
正则表达式(Regular Expression,简称 regex 或 regexp)是一种强大的文本匹配和处理工具。它使用特定的语法规则来描述字符串的匹配模式,广泛应用于文本搜索、替换和数据验证等场景。
1. 基础语法
1.1 字符匹配
-
`.` - 匹配任意单个字符(除换行符外)
-
`\d` - 匹配任意数字(0-9)
-
`\D` - 匹配任意非数字
-
`\w` - 匹配字母、数字、下划线
-
`\W` - 匹配非字母、数字、下划线
-
`\s` - 匹配任意空白字符(空格、制表符、换行符)
-
`\S` - 匹配任意非空白字符
1.2 数量限定符
-
`*` - 匹配前面的表达式 0 次或多次
-
`+` - 匹配前面的表达式 1 次或多次
-
`?` - 匹配前面的表达式 0 次或 1 次
-
`{n}` - 精确匹配 n 次
-
`{n,}` - 匹配至少 n 次
-
`{n,m}` - 匹配 n 到 m 次
1.3 位置匹配
-
`^` - 匹配行的开始
-
`$` - 匹配行的结束
-
`\b` - 匹配单词边界
-
`\B` - 匹配非单词边界
2. 高级语法
2.1 字符类
-
`[abc]` - 匹配方括号中的任意一个字符
-
`[^abc]` - 匹配除了方括号中字符的任意字符
-
`[a-z]` - 匹配 a 到 z 的任意小写字母
-
`[A-Z]` - 匹配 A 到 Z 的任意大写字母
-
`[0-9]` - 匹配任意数字
2.2 分组和引用
-
`(pattern)` - 捕获组,可以通过 \1, \2 等引用
-
`(?:pattern)` - 非捕获组
-
`(?=pattern)` - 正向预查
-
`(?!pattern)` - 负向预查
-
`(?<=pattern)` - 正向后查
-
`(?<!pattern)` - 负向后查
2.3 或运算
- `|` - 匹配左边或右边的表达式
3. 常用实例
3.1 验证常见格式
```regex
电子邮件
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
手机号码(中国)
^1[3-9]\d{9}$
身份证号(中国)
^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dX]$
日期格式(YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
URL
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
```
3.2 文本处理示例
```regex
提取HTML标签
<[^>]+>
匹配双字节字符(包括汉字)
[^\x00-\xff]
删除多余空格
\s{2,}
提取引号中的内容
"[^"]*"
```
4. 使用技巧
4.1 性能优化
-
避免过度使用贪婪匹配
-
合理使用非捕获组 (?:)
-
尽量使用具体的字符类而不是通配符
-
避免过度使用回溯
4.2 常见陷阱
- 贪婪匹配vs懒惰匹配
-
贪婪匹配:`.*`、`.+`
-
懒惰匹配:`.*?`、`.+?`
- 特殊字符转义
-
需要转义的字符:`. * + ? ^ $ [ ] ( ) { } | \ /`
-
使用 `\` 进行转义
- 环视断言使用注意事项
-
环视不消耗字符
-
环视只用于判断位置
5. 在不同编程语言中的使用
5.1 JavaScript
```javascript
// 创建正则表达式
let regex1 = /pattern/flags;
let regex2 = new RegExp('pattern', 'flags');
// 常用方法
string.match(regex) // 查找匹配项
string.replace(regex) // 替换匹配项
regex.test(string) // 测试是否匹配
regex.exec(string) // 执行匹配
```
5.2 Python
```python
import re
常用方法
re.match(pattern, string) # 从开始位置匹配
re.search(pattern, string) # 搜索整个字符串
re.findall(pattern, string) # 查找所有匹配
re.sub(pattern, repl, string)# 替换匹配项
```
6. 调试与测试
6.1 在线工具推荐
-
regex101.com - 实时测试和调试
-
regexr.com - 交互式学习
-
debuggex.com - 可视化展示
6.2 测试要点
-
边界情况测试
-
特殊字符处理
-
性能测试
-
多语言环境测试
总结
正则表达式是一个强大的文本处理工具,掌握它可以大大提高文本处理效率。关键是要:
-
理解基本语法和特殊字符的含义
-
多练习,积累常用表达式
-
注意性能优化
-
考虑可维护性
-
适当使用在线工具辅助开发和调试
记住:编写正则表达式时应该遵循"简单够用"的原则,过于复杂的正则表达式往往会带来维护困难和性能问题。