正则表达式交给AI写之后,我在边界测试上栽的三个坑
先说痛点:正则是“写时爽,出事懵”的典型
正则表达式大概是程序员日常里最矛盾的工具之一:写对了省几十行代码,写错了能让一次数据清洗悄悄污染整张表。独立开发者和小团队对它的感情尤其复杂——
- 需要用的时候临时抱佛脚,搜来的表达式直接复制粘贴,不敢改也懒得改;
- 看着能跑就上线,直到某天线上日志里冒出一批“看起来匹配了但不该匹配”的数据;
- 想验证,又不知道从哪儿下手构造测试用例,尤其那些阴间的边界输入。
于是很多人自然地想到:让AI来写正则。这确实是正确的方向,但方向对了不代表路走对了。
反例时间:三种常见的失败做法
失败做法一:一句话需求,直接要结果
最典型的提问方式:
> 帮我写一个匹配手机号的正则。
AI会很配合地给出 ^1[3-9]\d{9}$,看起来很完美。但“手机号”在你业务里的定义是什么?要不要支持带+86前缀?用户输入中间有空格或横线算不算?11位但以12开头的要不要放行?这些歧义没消解之前,AI给出的任何答案都只是“它猜的需求”,不是“你的需求”。
失败做法二:拿到正则就粘贴,从不验证
AI返回一段正则,复制、运行、看到第一个例子匹配成功,收工。这是最危险的一步——正则的坑恰恰藏在“第一个能跑的例子”之外。捕获组编号错了、贪婪匹配吞多了、多行模式下^$行为变了,这些问题在第一个正向用例上全都看不出来。
失败做法三:验证只测正向用例
即使有人想起来要测试,也往往只测“应该匹配的字符串”。但正则真正的质量分水岭是负向边界:长得像但不应匹配的、空字符串、超长输入、特殊字符、Unicode字符。只测正向用例的验证,约等于没验证。
正确路径:让AI同时承担“编写者”和“对抗测试员”两个角色
正确的流程其实是把AI从一个“答案生成器”变成一个“正则工程协作者”。我现在的做法分四步:
第一步:把需求写成规格,而不是一句话。 输入的来源、格式允许的变化、明确不接受的形态,全部写清楚。需求写得越像测试规格,AI输出的正则质量越高。
第二步:要求AI先复述理解,再给答案。 让AI用自己的话描述匹配规则,并主动列出它不确定的歧义点。这一步能提前暴露至少一半的需求漏洞。
第三步:让AI自己构造正反双向测试集。 关键不是AI给的正则对不对,而是它能否生成一组“应该匹配”和“绝对不该匹配”的边界用例——空串、前后缀干扰、相近格式、极端长度。这一步AI做得往往比人快得多,因为它见过大量真实世界里的脏数据形态。
第四步:在目标语言环境里跑验证。 正则方言差异(Python的re、JS的RegExp、grep的BRE/ERE)是隐形炸弹,验证必须在最终运行的那个引擎里做。AI可以直接生成对应语言的测试代码。
可复制的提示词模板
把下面这段直接作为提示词使用,把方括号里的内容替换掉即可:
你是一名正则表达式工程师。请按以下流程工作,不要跳步:
【需求描述】
- 匹配目标:[描述要匹配的内容,如"中国大陆手机号"]
- 输入来源:[数据来自哪里,如"用户在表单中手动输入"]
- 必须接受的格式:[列出所有合法变体,如"13800138000、+8613800138000"]
- 必须拒绝的格式:[列出明确非法的情况,如"11位但第二位是2、含空格"]
- 目标引擎:[运行环境,如"Python re 模块"]
【你的任务】
1. 先用你自己的话复述匹配规则,列出你仍然不确定的歧义点,等我确认后再继续。
2. 给出正则表达式,并逐段解释每个部分的含义。
3. 构造测试用例,分为四组:
a. 应匹配的标准用例(至少5个)
b. 应匹配的边界用例(前后有干扰文本、可选部分出现/不出现等,至少5个)
c. 不应匹配但形态相近的用例(至少8个,如多一位/少一位/错误前缀/非法字符)
d. 不应匹配的极端输入(空串、超长字符串、特殊字符、换行、全角字符)
4. 生成一段可直接运行的 [目标语言] 测试代码,逐一断言上述用例,输出通过/失败结果。
5. 指出这个正则的已知局限,以及哪些场景下它可能误判。用AI前后对比
用AI之前: 搜引擎找一个正则 → 肉眼扫两眼 → 粘贴上线 → 出问题后对着线上脏数据逆向排查,一次返工半天起步,而且修复之后心里依然没底——因为你不知道下一个边界会在哪里冒出来。
用AI之后: 写清楚规格(10分钟)→ AI复述确认(一轮对话)→ 拿到正则+双向边界测试集+可运行测试代码(几分钟)→ 本地跑一遍全绿再上线。整个流程半小时以内,产出的测试代码还能留在项目里当回归测试用。更重要的是,AI主动提出的“不确定点”经常反过来帮我发现自己都没想清楚的需求细节——这是单纯“搜一个正则”永远给不了的。
至于成本,这类任务用主流模型的对话版本就完全够用,不需要旗舰模型;具体选哪档、花多少钱,以官网价格页为准,按自己的使用频率算一下即可。
一点收尾建议
正则这类“小而锋利”的工具,最适合用AI的工程化流程来兜底:规格先行、AI复述、双向边界测试、目标引擎验证。四个环节缺一个,你都会在某个深夜收到线上告警。把上面那个提示词模板存进你的工具箱,下次需要正则时,先让AI当对手,再让它当作者。
如果你还没有稳定的AI调用渠道,或者想在多个模型之间按任务类型灵活切换(写正则用轻量模型,复杂推理再上旗舰),可以试试这个模型聚合平台,注册即可开始:https://api.thistoken.ai/register
---
不想折腾多家供应商的接入差异?在 https://api.thistoken.ai/register 注册,用一个 base_url 调用所有模型。