站内精选

一句话结论

AI 写的正则别急着贴进代码,备好正常、边界、反例三组样例,在目标引擎里跑一遍再决定用不用。这轮验证通常十分钟内能出结论。

这篇解决什么问题

我用 AI 生成正则的次数不少,翻车也翻过几次。绝大多数问题不是它完全写错,而是它写得“差不多对”——大部分行能匹配上,一到边界就漏字段。

这篇讲的是怎么用三组样例做一轮成本很低的回归验证。适用:你手上已经有一条 AI 生成、还没进代码库的正则。不适用:正则只有几个字符、出错代价极低的场景,那种直接手写更快。

开始前要准备什么

  • 一个能跑正则的本地环境,Python 3.x 或 Node 都行,免费
  • 至少 8 条真实样例,从日志或业务数据里捞,先脱敏
  • 一个能聊代码的模型,豆包或 DeepSeek 网页端有免费额度
  • 时间上留出十分钟左右,熟手会更快

具体怎么做

第 1 步 · 先用样例说清需求

我吃过一次亏,直接跟 AI 说“写个正则解析订单日志”。它给的能跑,但也仅此而已——字段顺序一变就废。后来我改成把两三行原始日志先摆出来,情况好很多。

我在用 Python 的 re 模块解析这行日志:2024-05-11 10:22:31 INFO order=A1037 elapsed=812ms。需要一条正则,从里面抓出「订单号」和「耗时毫秒」两个字段。要求:订单号只取 A 开头的字母数字部分,耗时只取数字、不含 ms;正则要能在 Python 3.10 的 re.findall 里直接用;不要用贪婪匹配。先别急着给答案,请用三行复述你对需求边界的理解,再动手。

预期产出:一段让 AI 主动复述的需求说明,以及它对模糊之处提出的反问。

第 2 步 · 让 AI 把自测样例一起交出来

只拿到一条正则,等于什么都没拿到。我会要求它顺手给出样例和预期结果——不过要有心理准备,它给的样例基本全是正例。

现在给出正则。除了正则本身,请一并输出三样东西:一是一行可以直接运行的 Python 验证代码,包含 import re;二是你自己构造的 5 条测试样例,覆盖你认为最主要的场景;三是每条样例的预期结果,写成「输入 => 输出」的形式。另外请说明,这条正则遇到空字符串、十万字符以上的超长输入、以及混入中文的输入,分别会发生什么。

预期产出:一条正则、5 条样例、逐条预期结果。先存着,后面比对要用。

第 3 步 · 补上 AI 不会主动写的反例

很多人容易忽略这一点:AI 的样例是拿自己的理解验证自己的答案,天然自洽。边界和反例必须由你来要,这是整轮验证里最有价值的一步。

上面 5 条样例都是应该匹配上的正例,这不够。请再补 3 组:边界组,卡在规则边缘但确实应该匹配,比如订单号只有一个字符、耗时是 0;反例组,长得像但绝对不该匹配,比如 order=1037 少了 A 前缀、elapsed=812s 后面跟了别的单位;脏数据组,格式被破坏的行,比如缺字段、多空格、日志被截断。每组给出输入和预期结果,并标注这条正则如果在这里出错,说明哪一部分有缺陷。

预期产出:手上凑齐 8 条左右的样例,正例、边界、反例各有覆盖。

第 4 步 · 在真实引擎里跑一遍

正则引擎之间的行为是有差异的,同一个写法在 Python 里能过,换个语言可能就变了。这一步不能省,脑内推演和实际执行结果经常对不上。

下面是待验证的正则和样例,请逐条推演执行过程,输出一张表格,列固定为:样例、预期、实际、是否通过、失败原因推测。正则:(?<=order=)[A-Z]d+(?=s)。样例一:order=A1037 elapsed=812ms,预期匹配到 A1037;样例二:order=1037 elapsed=812ms,预期无匹配;样例三:order=A1 elapsed=0ms,预期匹配到 A1;样例四:order=A12 elapsed=812s,预期匹配到 A12。推演时严格按引擎的匹配顺序走,不要跳步;结果和预期不一致时先别改正则,指出是分组、量词、锚点还是转义导致的。

预期产出:一张逐条比对的表,哪条没通过、问题出在哪一部分,一眼能看出来。

第 5 步 · 把过程留成清单

验证做完就结束,下次还得从头想一遍。我会让 AI 把这次的过程收成清单,下次换一条正则照着跑就行。

最后,请把这次验证整理成一份可以直接复用的「正则验证清单」,用无序列表输出,包含三类条目:每次必跑的三类样例分别要覆盖什么;提交前要确认的正则写法细节,比如锚点、贪婪、转义、Unicode;上线后如果线上匹配率异常,第一顺位要检查什么。每条控制在一行以内,不超过 30 字,不要写解释性长句。

预期产出:一份十几行以内的清单,能直接贴进自己的笔记或仓库 README。

实测记录

同一条日志解析正则,我完整走了一轮,记录如下。

环节 实际情况
让 AI 出第一版 约 3 分钟,DeepSeek 和豆包各出一版,互相对照
补边界和反例 约 5 分钟,8 条样例里有 2 条是 AI 没提到的
本地跑回归 约 2 分钟,Python 3.10 的 re.findall 逐条比对
返工情况 第一版漏了转义,反例那条直接误匹配,改了一轮
和手工写对比 手工写约 20 分钟,AI 出稿快,但验证省不掉

最容易错的 3 个地方

  1. 只拿 AI 自己给的样例去验证,等于自己考自己。改法:样例从线上日志里捞。
  2. 在脑子里跑正则,没在目标引擎里跑过。改法:拿 Python 或 Node 实跑一遍。
  3. 只测正例不测反例,正则写得再宽也能全过。改法:每条正则至少配两个反例。

可复用的东西

把上面五步的提示词按顺序连起来,就是一份完整的正则验证模板。第 1 步说需求,第 2 步要正则和自测样例,第 3 步补边界反例,第 4 步逐条推演比对,第 5 步整理成清单。用的时候把样例和字段名换成你自己的。

正则写出来只花一分钟,出事排查可能耗一下午。花十分钟做一轮回归,比事后翻日志划算得多。

你手头有没有哪条正则,是当初 AI 给的、到现在还没验证过的?

常见问题解答

AI 生成的正则,为什么不能直接用?

因为它经常写得“差不多对”——常见输入能匹配,边界和异常格式就漏。它给的自测样例又基本是正例,逻辑上自洽但覆盖不够。跑一轮回归的成本很低,能把这类漏匹配挡在代码库外面。

三组样例具体要覆盖哪些情况?

正常组覆盖最常见的真实输入;边界组卡在规则边缘但确实该匹配,比如单字符、零值;反例组长得像但绝不该匹配,比如缺前缀、多带了单位。有条件再加一组脏数据,格式被破坏的行。

手边没有真实日志,样例怎么凑?

可以先让 AI 生成一批,但必须自己改——加两条反例、把字段顺序打乱、混进一条截断的行。更稳妥的是从测试环境或脱敏样本里捞,实在没有就按业务规则手写,写的时候故意写错一点。

小程序阅读免费
微信扫码进入小程序,按岗位找 AI 实操步骤
微信扫码进小程序
按岗位找 AI 实操步骤 · 提示词可收藏

发表回复

后才能评论