那些没人敢动的祖传正则,我让AI逐行讲给我听
先说我做错的三件事
接手一个跑了五年的风控系统时,仓库里躺着两百多个正则表达式和几十个 Shell 脚本。没有注释,没有文档,写代码的人早已离职。我当时的做法,现在回头看,每一步都是错的。
错误一:让AI一次性“全部重写”。 我把整个脚本目录丢给模型,说“帮我重构并加注释”。结果返回的代码确实漂亮,注释也很齐全——但它顺手“优化”了几处逻辑,把一个依赖系统时区的判断改成了标准写法。而那个“不标准”的写法,恰恰是为了兼容一台改过时区的老旧服务器。上线当晚告警响起,我回滚到凌晨三点。
错误二:只让AI加注释,不让它解释“为什么”。 第二次我学乖了,只加注释不改代码。AI 交回来的注释长这样:# 匹配以数字开头的字符串。技术上完全正确,也完全没用。因为我知道它匹配什么,我不知道的是:这个正则是为了拦截哪类攻击,为什么用 ^ 而不是 \A,为什么捕获组只取第二段。这种“语法翻译式注释”等于没写。
错误三:相信AI读懂了没有上下文的正则。 一个 300 多字符的邮件头校验正则,AI 自信地给出了注释。我拿三个边界用例去验证,发现它对一处 (?!...) 负向前瞻的理解是反的。AI 没有撒谎,它只是在信息不足时倾向于给出一个“看起来合理”的答案。
三次踩坑之后我明白了一件事:给存量代码写注释,难点从来不在“写”,而在“确认”。 AI 写得快,但没人核对,注释就会变成另一种形式的谎言——比没有注释更危险,因为后人会信。
后来我跑通的流程
我把整个流程拆成四步,核心思路是:AI 负责“解释”,我负责“裁决”,一切以运行结果为准。
第一步:资产盘点,先分类再动手。 写一个简单脚本,把所有正则和 Shell 按“是否还在被引用、最后修改时间、长度复杂度”分成三档:活跃且复杂(优先处理)、活跃但简单(批量处理)、疑似废弃(只标记不处理)。这一步防止把力气花在死代码上——我曾给一段早已下线的逻辑认真写了半小时注释。
第二步:逐条解释 + 反向验证。 这是整个流程的关键。不是让AI直接写注释,而是先让它做两件事:
- 用自然语言解释这个正则/这段脚本的意图;
- 自动生成 5-10 个测试用例,必须包含边界情况(空输入、超长输入、特殊字符、多字节字符)。
然后我拿这些用例在实际环境中跑一遍,或者对照历史日志确认。AI 的解释和真实行为对得上,才进入下一步;对不上,就把差异反馈给AI重新分析。 那个邮件头正则就是在这一步暴露的——生成的用例里有一个合法邮件被AI判定为不匹配,和线上行为一致,说明它前面的解释确实错了,我纠正后才拿到可靠注释。
第三步:注释分两层写。 我要求AI区分“是什么”和“为什么”:
- 行内注释:解释语法和行为,给未来维护的人看;
- 头部注释:记录业务背景、已知边界、验证过的测试用例。
第四步最有价值:让AI把验证过的用例固化成可执行测试文件。这样注释不只是文字,还带着一份“活证据”。半年后如果有人怀疑注释过时,跑一遍测试就知道。
第四步:人工终审,按风险分级。 涉及安全、资金、权限的代码,注释我逐条亲自过;工具类脚本抽查即可。AI 把初审时间从几天压到几小时,我把省下的时间花在真正需要人判断的地方。
前后对比
| 环节 | 纯手工 | AI 辅助流程 |
|---|---|---|
| 单个复杂正则理解 | 1-3 小时查资料+试验 | 15-30 分钟(含验证) |
| 两百个正则注释 | 没人敢排期 | 两周内完成,含测试固化 |
| 注释可靠性 | 依赖个人水平 | 每条注释有测试用例背书 |
| 新人上手 | 靠口口相传 | 读注释+跑测试 |
更重要的是心态变化:以前这些祖传代码是“不敢动的雷区”,现在每个雷旁边都立了牌子,写着它为什么是雷、什么情况下会炸、怎么验证。
可复制的提示词模板
你是一位资深代码考古专家。我会给你一段存量正则表达式或 Shell 脚本,
请严格按以下步骤处理,不要跳步:
1. 【解释】用自然语言说明这段代码的行为和可能的业务意图。
对不确定的部分,明确标注"推测",不要编造确定的解释。
2. 【用例】生成 5-10 个测试输入,必须覆盖:空输入、超长输入、
特殊字符、多字节字符、以及你认为最容易被误判的边界情况。
对每个用例,给出你预测的执行结果。
3. 【风险】指出这段代码中语法上可能产生歧义或历史遗留的写法。
4. 【注释】待我确认第1-3步与实际行为一致后,再输出两层注释:
- 头部注释:业务背景、边界说明、验证过的用例
- 行内注释:解释语法和行为,不重复代码本身
规则:禁止修改任何代码逻辑;禁止在未验证前输出最终注释。
待处理代码:
{粘贴你的正则或脚本}
{可选:补充这段代码的调用场景或历史背景}模板的核心是那句“待我确认后再输出注释”——它强制把流程切成“AI解释 → 人工验证 → AI落笔”三段,堵住了AI自信编造的口子。
几点提醒
- 模型选择上,处理复杂正则建议用推理能力较强的模型,简单脚本注释用轻量模型即可,成本差异明显(以官网价格页为准);
- Shell 脚本尤其要小心,
rm、管道、环境变量相关逻辑务必在沙箱环境验证,不要信任何“看起来对”的输出; - 注释写完不是终点,把它和测试用例一起纳入 CI,才能长期保鲜。
存量代码的注释这件事,拖一年就多一年的债。AI 没法替你还债,但它能把“考古”的成本降到你自己动手的十分之一——前提是你始终握着最后的裁决权。
如果你也在找一个稳定、支持多模型切换的 AI 接口来做这类代码维护工作,可以试试这个网关:https://api.thistoken.ai/register
---
不想折腾多家供应商的接入差异?在 https://api.thistoken.ai/register 注册,用一个 base_url 调用所有模型。