正则表达式速查表与可视化工具
快速掌握正则表达式符号,把一个模式拆成通俗易懂的部分,并用你自己的文本测试。全部在浏览器中运行。
速查表
. 换行以外的任意一个字符 示例: a.c\d 一个数字 (0-9) 示例: \d+\D 非数字的任意字符 示例: \D+\w 一个单词字符 (a-z, A-Z, 0-9, _) 示例: \w+\W 非单词字符的任意字符 示例: \W+\s 一个空白字符 示例: \s+\S 非空白的任意字符 示例: \S+^ 文本开头 示例: ^hello$ 文本结尾 示例: world$\b 一个单词边界 示例: \bword\b\B 不是单词边界的位置 示例: \Bword\B[abc] 字符集合 示例: [abc]+[^abc] 取反的字符集合 示例: [^abc]+[a-z] 字符集合 示例: [a-z0-9]+(abc) 捕获组 示例: (abc)(?:abc) 非捕获组 示例: (?:abc)+(?<n>) 具名分组 示例: (?<year>\d{4})\1 反向引用 示例: (\w)\1a|b 择一 示例: cat|dog? 可选(0 或 1) 示例: colou?r* 重复 0 次或以上 示例: a*+ 重复 1 次或以上 示例: a+{m,n} 重复指定的次数 示例: a{2,4}+? 同样的含义,但尽可能短 示例: <.+?>(?=) 仅当后面跟着 示例: foo(?=bar)(?!) 仅当后面不跟着 示例: foo(?!bar)(?<=) 仅当前面是 示例: (?<=\$)\d+(?<!) 仅当前面不是 示例: (?<!\$)\d+\. 把下一个字符当作字面字符 示例: 3\.14\n 一个换行 示例: line\n\t 一个制表符 示例: \tindented常用校验模式
| 用途 | 模式 | 说明 | 匹配示例 |
|---|---|---|---|
| 电子邮件地址 | ^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$ | 校验电子邮件地址的常见形式。 | user@example.com |
| 电话号码(美国) | ^\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}$ | 匹配十位号码,带或不带连字符、空格、括号均可。 | 123-456-7890 |
| 邮政编码(美国) | ^\d{5}(-\d{4})?$ | 匹配五位和九位的邮政编码。 | 90210-1234 |
| 日期 (YYYY-MM-DD) | ^\d{4}-\d{2}-\d{2}$ | 匹配简单的纯数字日期格式。 | 2026-09-16 |
| IP 地址 (IPv4) | ^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$ | 匹配 IPv4 地址的形式,但不检查每一段是否在 0 到 255 之间。 | 192.168.1.1 |
这些模式检查的是值的形式,而不是它是否真实存在。一个地址可以完全符合邮件模式却依然发不出去,所以用它们尽早发现拼写错误,绝不要当作唯一的校验。
这个工具提供什么
一份精简的正则表达式符号参考,一种把模式翻译成日常句子的拆解,以及一个能显示模式在你自己文本中匹配到什么的测试器。
什么时候用
写模式时用,读别人写的模式时用,给同事讲正则基础时也用。把模式一段一段念出来,往往就是让人豁然开朗的那一步。
局限
拆解遵循 JavaScript 的正则表达式,因为那正是浏览器所执行的。其他方言有所不同:PCRE、Python、Java 和 .NET 各自添加了自己的语法,而 grep、sed 等 POSIX 工具使用的是更老、更小的语法。测试器在单独的线程中运行你的模式,几秒后就会停止,因此无限回溯的模式无法让页面卡死。
如何使用速查表
搜索一个符号,或粘贴一个模式,逐段阅读。
- 浏览或搜索符号列表。
- 粘贴一个模式,看它被拆成哪些段。
- 输入示例文本,看清真正匹配到什么,再调整模式。
常见问题
这个工具会上传我的模式吗?
不会。拆解和匹配都在你的浏览器中进行,模式和文本都不会发送到任何地方。
它遵循哪种正则方言?
JavaScript 的方言,因为干活的正是这个引擎。这里的绝大部分内容——字符类、分组、量词、锚点——在各个方言中都是一样的。
我可以在这里测试我的模式吗?
可以。在测试框中输入文本,匹配会被高亮显示,并列出每处匹配捕获到的分组。
我的模式为什么被中止了?
有些模式遇到几乎能匹配的文本时会花费指数级的时间,常见原因是量词套量词,例如 (a+)+b。测试器几秒后就放弃,而不是让页面卡死;这次中断本身就是一个有用的警告:同样的模式会把服务器拖垮。
Wikipedia — Regular expression
Wikipedia — PCRE
Wikipedia — Finite-state machine
Wikipedia — ReDoS
Wikipedia — Backtracking