regex cheat-sheet programming javascript python dev-tech

正则表达式速查表:包含可视化示例的完整参考指南

一个全面的正则表达式参考指南,涵盖元字符、量词、锚点、前瞻/后瞻和铁路图。非常适合开发人员和数据分析师。

正则表达式速查表:终极参考指南

正则表达式(Regex)功能极其强大,但众所周知,掌握它也具有一定难度。无论您是在验证电子邮件地址、抓取数据,还是在代码中进行搜索,拥有一份可靠的正则表达式速查表都可以为您节省大量的挫败感。

在本指南中,我们分解了每个正则表达式组件,从基础字符到复杂的前瞻/后瞻,并配有可视化解释和实际示例。


1. 核心元字符

这些是任何正则表达式模式的构建块。

元字符 描述 示例
. 匹配除换行符外的任何单个字符 a.b 匹配 acb, a1b
\ 转义特殊字符 \. 匹配字面量 .
| 逻辑或(OR) cat|dog 匹配 catdog
[] 字符集(匹配括号内的任何字符) [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} nm 次之间 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)**是一种可视化表示正则表达式流程的方法。

想象一下火车轨道:

  1. 轨道在分支|)处分开。
  2. 轨道在量词*, +)处循环。
  3. 轨道穿过一个分组框。

使用可视化工具可以帮助您调试逻辑错误,尤其是在处理嵌套组或复杂量词时。


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, HELLOhello

问:什么是回溯(Backtracking),它为什么很重要?

:当正则表达式引擎尝试一条路径失败,然后“回退”以尝试另一条路径时,就会发生回溯。具有许多嵌套量词的复杂模式可能会导致灾难性回溯,从而导致您的应用程序或服务器冻结。


在 Tool3M 上测试您的模式