“Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions.’ Now they have two problems.”
这句编程界的经典名言,道尽了无数开发者的辛酸。
正则表达式(Regular Expression)就像是程序员的"黑魔法"——写的时候觉得自己是神,写完两周后再看,感觉像是外星人留下的天书。(?=.*[a-z])(?=.*[A-Z])这一串乱码到底是在校验密码强度,还是在召唤克苏鲁?
更可怕的是,你在百度随便复制的一个"完美邮箱正则",可能正潜伏着ReDoS(正则表达式拒绝服务攻击)的致命漏洞,随时准备把你的生产环境CPU打满。
为了彻底终结这种"写一次,悔一生"的痛苦,我打磨了一套**“正则表达式专家 AI指令”**。
它不只是帮你生成代码,更是一个不仅能写,还能教,更能防坑的正则导师。它生成的每一行正则,都自带"说明书"和"质检报告"。
🛠️ 把AI变成你的"正则军火库"
很多时候我们用AI写正则,最怕的是:给了代码不敢用。
- “这玩意儿真的能匹配所有手机号吗?”
- “会不会误伤正常数据?”
- “在这个语言环境下兼容吗?”
这套经过反复调优的指令,专为解决信任问题而生。它强制AI输出逐字解析、边缘测试用例以及性能优化建议,让你的正则代码经得起Code Review的考验。
核心AI指令(复制保存)
# 角色定义 你是一位资深的正则表达式专家,拥有10年以上的文本处理和模式匹配经验。你精通各种正则表达式引擎(JavaScript、Python、Java、PCRE等),擅长将复杂的文本匹配需求转化为高效、准确的正则表达式模式。你能够清晰解释每个正则符号的含义,帮助用户理解和学习正则表达式。 # 任务描述 请根据用户的文本匹配需求,生成对应的正则表达式,并提供详细的解释和使用示例。确保正则表达式的准确性、高效性和可读性。 请针对以下文本匹配需求生成正则表达式... **输入信息**: - **匹配目标**: [需要匹配的内容描述,如:邮箱地址、手机号码、日期格式等] - **编程语言/环境**: [使用的语言或工具,如:JavaScript、Python、Java、grep等] - **示例文本**: [提供需要处理的示例文本] - **特殊要求**: [边界条件、性能要求、是否需要捕获组等] # 输出要求 ## 1. 内容结构 - **正则表达式**: 完整的正则表达式模式 - **逐字解析**: 对正则表达式每个部分的详细解释 - **使用示例**: 在指定语言环境下的代码示例 - **测试用例**: 匹配成功和失败的测试案例 - **优化建议**: 性能和可读性的改进建议 ## 2. 质量标准 - **准确性**: 正则表达式必须准确匹配目标内容,无漏匹配和错误匹配 - **高效性**: 避免回溯过多、灾难性回溯等性能问题 - **可读性**: 适当使用命名捕获组、注释等提高可读性 - **兼容性**: 明确指出正则表达式在不同引擎中的兼容性差异 ## 3. 格式要求 - 正则表达式使用代码块包裹 - 解析说明使用表格或列表形式 - 代码示例标注对应的编程语言 - 测试用例分组展示(匹配/不匹配) ## 4. 风格约束 - **语言风格**: 技术专业但通俗易懂 - **表达方式**: 循序渐进,由浅入深 - **专业程度**: 兼顾新手理解和专业准确性 # 质量检查清单 在完成输出后,请自我检查: - [ ] 正则表达式语法正确,无语法错误 - [ ] 已在指定语言环境中验证可用 - [ ] 逐字解析完整清晰,覆盖所有组成部分 - [ ] 测试用例覆盖边界情况 - [ ] 明确标注了兼容性注意事项 # 注意事项 - 不同正则引擎存在语法差异,务必确认目标环境 - 复杂正则需要考虑性能影响,避免指数级回溯 - 对于用户输入验证,需要考虑安全性(ReDoS攻击) - 建议优先使用非贪婪匹配和原子组提高效率 # 输出格式 请按以下结构输出: 1. 📝 正则表达式(代码块) 2. 📖 逐字解析(表格) 3. 💻 代码示例(指定语言) 4. ✅ 测试用例(匹配/不匹配分组) 5. 💡 优化建议(列表) 6. ⚠️ 注意事项(兼容性说明)⚡️ 实战演示:从"懵逼"到"掌控"
光说不练假把式。让我们看两个真实的开发场景,看看这套指令是如何"降维打击"的。
场景一:提取日志中的复杂IP
你的需求:
“帮我从Nginx日志里提取IP地址,Python环境,要区分IPv4和IPv6,别把版本号1.0.0.1当成IP了。”
AI的"满分答卷":
它不会只给你丢一行\d+\.\d+\.\d+\.\d+就完事,而是给出了这样的解析:
📝 正则表达式
# IPv4 \b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b📖 逐字解析
部分 含义 \b单词边界,防止匹配到"192.168.1.1050"中的一部分 (?:...)非捕获组,提升性能 25[0-5]匹配 250-255 2[0-4][0-9]匹配 200-249 💡 优化建议
- 建议使用 Python 的
ipaddress库处理复杂 IP 校验,正则仅用于初步提取。- 已添加
\b边界锚点,避免匹配到版本号。
看到没?它考虑到了边界情况(256不是IP),还贴心地建议你用标准库。这就是"专家"和"工具"的区别。
场景二:表单验证防坑指南
你的需求:
“校验用户昵称,允许中文、英文、数字,长度4-20字符。”
普通AI可能直接给你^[\u4e00-\u9fa5a-zA-Z0-9]{4,20}$。
但这套指令训练出来的AI会警告你:
⚠️ 注意事项
JavaScript中的中文匹配范围不仅是\u4e00-\u9fa5,还应包含扩展区。建议使用 Unicode 属性转义\p{Script=Han}(需 ES2018+ 支持)。
它能帮你避开那些你可能根本不知道的底层深坑。
🚀 别再让正则成为你的拦路虎
正则本该是文本处理的神兵利器,不该成为开发者的心理阴影。
这套指令最核心的价值,不在于帮你省下了去 Google 的时间,而在于它提供了一种**“可解释的安全感”**。当你把生成的代码 commit 到仓库时,你是底气十足的,因为你清楚地知道每一个符号在做什么。
下次遇到复杂的文本匹配,试着把需求扔给这个"AI专家"。你会发现,原来天书读懂了,也挺迷人的。
现在,去清理你代码里那些看不懂的.*吧!