写正则写到一半忘了 \b 是什么?或者写出来明明看着对,跑起来就是没匹配?这篇给你一份实战速查表——按元字符、量词、分组、真实样例 4 块组织,每个细节配一句人话解释。配合 Piick 正则测试工具 用,边查边测。

元字符速查表

正则里所有「不是字面字符」的特殊符号统称元字符。最常用的 12 个:

  • . 任意单字符(默认不匹配换行,加 s flag 才匹配)
  • ^ 行首(多行模式下匹配每行开头)
  • $ 行尾(多行模式下匹配每行结尾)
  • \b 单词边界(单词字符 \w 和非 \w 之间)
  • \d 数字,等价 [0-9]
  • \D 非数字
  • \w 单词字符,等价 [A-Za-z0-9_]
  • \W 非单词字符
  • \s 空白字符(空格、Tab、换行)
  • \S 非空白
  • [abc] 字符类,匹配 a/b/c 任一
  • [^abc] 反向字符类,匹配是 a/b/c 的字符

记忆技巧:d 是 digit,w 是 word,s 是 space——大写就是「非」。

量词:贪婪 vs 非贪婪

量词控制前一个元素出现几次:

  • * 0 次或多次
  • + 1 次或多次
  • ? 0 次或 1 次
  • {n} 恰好 n 次
  • {n,} 至少 n 次
  • {n,m} n 到 m 次

关键陷阱:默认是贪婪匹配,会尽可能多吃。比如用 ".*" 匹配 "a" and "b" 会得到整串 "a" and "b",而不是两段。加 ? 变成非贪婪:".*?" 才能拿到 "a""b" 两段。

调试正则时,怀疑匹配太贪,第一个动作就是加 ?

分组与捕获

圆括号 () 是分组,有 3 种用途:

  • 捕获组:把匹配内容记下来,后面可以 \1 反向引用
  • 非捕获组 (?:...):只分组不捕获,节省内存
  • 命名捕获组 (?<name>...):用名字引用,代码更可读

举个真实例子:匹配 HTML 标签 <a href="...">,既要拿标签名又要拿属性。用 <\/?([a-z]+)([^>]*)> ——第一个括号捕获标签名,第二个捕获属性。命名捕获版本是 <\/?(?<tag>[a-z]+)(?<attrs>[^>]*)>,可读性好得多。

正则的分组比你想的复杂——Piick 正则测试工具 的「Explain」面板能把每个括号的作用拆给你看,不用猜。

5 个真实场景的正则样例

  1. 邮箱 [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,} ——验证常见格式,严格 RFC 5322 那条太长,实战用简化版
  2. URL https?:\/\/[^\s]+ ——匹配 http/https 开头到第一个空格
  3. IPv4 \b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b ——4 段 0-255,完整校验要分段比较数字大小
  4. ISO 日期 \d{4}-\d{2}-\d{2} ——形如 2026-06-28
  5. URL slug [a-z0-9]+(?:-[a-z0-9]+)* ——小写字母数字加中划线,博客文章 URL 通用格式

复杂正则别在脑子里写——粘到 Piick 正则测试工具 里,左边写右边实时高亮匹配,改一行看一次效果,比反复 reload 页面调试快 10 倍。


现在就打开 Piick 正则测试工具,粘一段文本进去,试一个从来没跑过的正则。