正则表达式速查表:终极参考指南
正则表达式(Regex)功能极其强大,但众所周知,掌握它也具有一定难度。无论您是在验证电子邮件地址、抓取数据,还是在代码中进行搜索,拥有一份可靠的正则表达式速查表都可以为您节省大量的挫败感。
在本指南中,我们分解了每个正则表达式组件,从基础字符到复杂的前瞻/后瞻,并配有可视化解释和实际示例。
1. 核心元字符
这些是任何正则表达式模式的构建块。
| 元字符 | 描述 | 示例 |
|---|---|---|
. |
匹配除换行符外的任何单个字符 | a.b 匹配 acb, a1b |
\ |
转义特殊字符 | \. 匹配字面量 . |
| |
逻辑或(OR) | cat|dog 匹配 cat 或 dog |
[] |
字符集(匹配括号内的任何字符) | [aeiou] 匹配任何元音字母 |
[^] |
否定字符集 | [^0-9] 匹配任何非数字 |
2. 量词:控制频率
量词告诉正则表达式引擎一个字符或组应该出现多少次。
| 量词 | 描述 | 示例 |
|---|---|---|
* |
0 次或多次 | a* 匹配 ``, a, aa |
+ |
1 次或多次 | a+ 匹配 a, aa |
? |
0 次或 1 次(可选) | a? 匹配 `` 或 a |
{n} |
恰好 n 次 |
a{3} 匹配 aaa |
{n,} |
n 次或更多次 |
a{2,} 匹配 aa, aaa |
{n,m} |
n 到 m 次之间 |
a{2,4} 匹配 aa, aaa, aaaa |
3. 字符类:常用快捷方式
| 类 | 描述 | 等价于 |
|---|---|---|
\d |
任何数字 | [0-9] |
\D |
任何非数字 | [^0-9] |
\w |
任何单词字符(字母、数字和下划线) | [a-zA-Z0-9_] |
\W |
任何非单词字符 | [^a-zA-Z0-9_] |
\s |
任何空白字符(空格、制表符、换行符) | [ \t\n\r\f\v] |
\S |
任何非空白字符 | [^ \t\n\r\f\v] |
4. 锚点:定义边界
| 锚点 | 描述 | 示例 |
|---|---|---|
^ |
字符串/行的开头 | ^Hello |
$ |
字符串/行的结尾 | World$ |
\b |
单词边界 | \bcat\b (匹配 "cat" 但不匹配 "category") |
\B |
非单词边界 | \Bcat (匹配 "category") |
5. 分组与捕获
| 语法 | 描述 | 示例 |
|---|---|---|
(...) |
捕获组 | (abc)+ 匹配 abcabc |
(?:...) |
非捕获组 | (?:abc)+ |
(?<name>...) |
命名捕获组 | (?<id>\d+) |
\1 |
对第 1 组的反向引用 | (\w)\1 匹配 aa, bb |
6. 前瞻与后瞻:高级过滤
前瞻/后瞻(Lookaround)允许您仅当一个模式后面跟着(或不跟着)另一个模式,或者前面跟着(或不跟着)另一个模式时,才匹配该模式,而不会将另一个模式包含在匹配结果中。
| 语法 | 名称 | 描述 |
|---|---|---|
(?=...) |
正向前瞻 | 后面跟着 ... |
(?!...) |
负向前瞻 | 后面不跟着 ... |
(?<=...) |
正向后瞻 | 前面跟着 ... |
(?<!...) |
负向后瞻 | 前面不跟着 ... |
7. 使用铁路图可视化正则表达式
复杂的正则表达式模式很快就会变得难以阅读。**铁路图(Railroad Diagrams)**是一种可视化表示正则表达式流程的方法。
想象一下火车轨道:
- 轨道在分支(
|)处分开。 - 轨道在量词(
*,+)处循环。 - 轨道穿过一个分组框。
使用可视化工具可以帮助您调试逻辑错误,尤其是在处理嵌套组或复杂量词时。
8. 实际示例
电子邮件验证(简化版)
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
强密码(前瞻示例)
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$
(要求至少一个子写字母、一个大写字母、一个数字,且长度不少于 8 个字符)
电话号码(美国格式)
^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$
9. 常见问题 (FAQ)
问:贪婪匹配和惰性匹配有什么区别?
答:默认情况下,量词是贪婪的——它们会匹配尽可能多的内容。在量词后面添加 ?(例如 .*?)会使其变成惰性(或非贪婪),这意味着它会匹配尽可能少的内容。
问:如何执行不区分大小写的搜索?
答:大多数正则表达式引擎使用标志(通常是 i)来启用不区分大小写。例如,/hello/i 会匹配 Hello, HELLO 和 hello。
问:什么是回溯(Backtracking),它为什么很重要?
答:当正则表达式引擎尝试一条路径失败,然后“回退”以尝试另一条路径时,就会发生回溯。具有许多嵌套量词的复杂模式可能会导致灾难性回溯,从而导致您的应用程序或服务器冻结。
在 Tool3M 上测试您的模式
- 正则表达式测试器:具有高亮显示和可视化调试功能的实时正则表达式测试。
- JSON 格式化工具:使用正则表达式搜索和过滤大型 JSON 数据集。
- 大小写转换器:在应用正则表达式过滤器之前清理文本。