正则表达式测试教程

在线正则表达式测试工具怎么用?实时匹配测试 regex,高亮匹配结果,支持替换与常用语法,调试正则更高效。

一条正则引发的线上事故

校验邀请码的正则写成 ^[A-Z]{3}$,测试用 ABC 全过,上线后 ABCD 也过了——少了锚点。加回 ^ $ 后,再测:aaa 不匹配(小写)、aaaa 不匹配(四个 a)、aaa 匹配。量词 {3} 的含义是"恰好三次",多一个少一个都失败,这个边界性质是正则测试的第一课。

正则的边界测试法

  • 正常样本:完全符合规则的输入,必须匹配
  • 边界样本:刚好触到规则边缘(长度刚好、字符刚好)
  • 越界样本:超一位、少一位、错一位,都必须拒绝
  • 畸形样本:空串、超长串、特殊符号混合

量词的三档语义

a{3} 是恰好三次、a{3,} 是至少三次、a{3,6} 是三到六次——三者边界不同:aaaa 对 a{3} 不匹配、对 a{3,} 匹配、对 a{3,6} 匹配;aaaaaaa(七个)则只有 a{3,} 还匹配。写完正则把这三档各测一遍,能抓住八成的量词错误。

常见问题

测试通过为什么线上失配?
多为样本覆盖不足:只测了正常样本没测越界样本,或不同语言的正则方言有差异。
* 和 *? 有什么区别?
贪婪与惰性:a.*b 吃到最后一行的 b,a.*?b 停在第一个 b,长文本结果完全不同。
正则会卡死吗?
嵌套量词可能灾难性回溯,线上输入加长度限制是必要的护栏。

正则的可信度来自测试样本的刁钻程度——越界样本比正常样本更值钱。

去使用 正则表达式测试工具