# 正则表达式完全指南
正则表达式(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 性能优化
1. 避免过度使用贪婪匹配
2. 合理使用非捕获组 (?:)
3. 尽量使用具体的字符类而不是通配符
4. 避免过度使用回溯
### 4.2 常见陷阱
1. 贪婪匹配vs懒惰匹配
- 贪婪匹配:`.*`、`.+`
- 懒惰匹配:`.*?`、`.+?`
2. 特殊字符转义
- 需要转义的字符:`. * + ? ^ $ [ ] ( ) { } | \ /`
- 使用 `\` 进行转义
3. 环视断言使用注意事项
- 环视不消耗字符
- 环视只用于判断位置
## 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 在线工具推荐
1. regex101.com - 实时测试和调试
2. regexr.com - 交互式学习
3. debuggex.com - 可视化展示
### 6.2 测试要点
1. 边界情况测试
2. 特殊字符处理
3. 性能测试
4. 多语言环境测试
## 总结
正则表达式是一个强大的文本处理工具,掌握它可以大大提高文本处理效率。关键是要:
1. 理解基本语法和特殊字符的含义
2. 多练习,积累常用表达式
3. 注意性能优化
4. 考虑可维护性
5. 适当使用在线工具辅助开发和调试
记住:编写正则表达式时应该遵循"简单够用"的原则,过于复杂的正则表达式往往会带来维护困难和性能问题。