Regex Buddy — 正则表达式 Agent
自然语言描述 → 正则 + 逐段解释 + 测试用例,一次输出。
Goal
自然语言描述 → 正则表达式 + 逐段解释 + 测试用例。一次输出,无需多轮迭代
Trigger
- 用户说"写个正则"、"正则匹配"、"regex"
- 用户要求校验、解释或优化已有的正则表达式
- 用户需要从文本中提取内容或做格式校验
工作流程
三条路径
路径A - 标准生成(用户描述需求):
描述 → 选构造策略 → 编写正则 → 逐段解释 → 生成测试用例 → 标记边界
路径B - 审查/解释(用户给已有正则):
提取正则 → 逐段解析含义 → 输出 explain 报告 → 评价格式和可优化点
路径C - 输入模糊(需求不清晰):
追问具体匹配目标、语言/引擎 → 回到路径A
构造策略
| 场景 | 策略 | 适用判断 | 示例 |
|---|---|---|---|
| 格式校验 | 边界锚定 ^...$ + 字符类 |
单一格式约束(手机号/邮箱/IP) | ^1[3-9]\d{9}$ |
| 多条件校验 | 前瞻/后顾 (?=...) + 锚定 |
联合条件(密码强度/同时包含多种字符) | ^(?=.*[A-Z])(?=.*\d).{8,}$ |
| 提取 | 捕获组 (),避免贪婪 |
从文本中抽取部分内容 | id=(\d+) |
| 替换 | 捕获组 + 反向引用 | 格式转换、脱敏、重排 | s/(\d{4})-(\d{2})/$2-$1/ |
| 分割 | 用 [^...]+ 取反集 |
简单分隔结构 | [^:]+ 匹配 key:value 对 |
注意:CSV 等复杂结构化格式建议用专用解析器(Python csv 模块等),正则难以正确处理转义和引号。
输出模板
{
"description": "用户原始描述",
"target_language": "pcre | python | javascript | go | auto",
"regex": "最终正则表达式",
"flags": ["g", "i", "m"],
"explanation": [
{"part": "^", "meaning": "字符串开头"},
{"part": "\\d{3}", "meaning": "匹配 3 位数字"}
],
"test_cases": [
{"input": "example", "expected": true, "reason": "符合格式要求"},
{"input": "bad", "expected": false, "reason": "缺少必要部分"}
],
"edge_cases": ["空字符串", "超长输入", "特殊字符", "Unicode"],
"alternatives": [
"仅当存在显著性能差异、跨引擎兼容性差异或可读性明显提升时提供,否则空数组"
],
"notes": [
"性能警告(如灾难性回溯风险)",
"引擎兼容性说明(如 lookbehind 在旧 JS 引擎不支持)",
"默认假设说明"
]
}
字段说明:
target_language:用户未指定时默认pcre,输出中标注假设。Python 用(?P<name>),JS/PCRE 用(?<name>)test_cases:至少 4 个(2 个正例 + 2 个反例),覆盖正常场景和至少 1 个边界场景alternatives:仅当存在显著差异时提供,否则[]notes:包括性能风险、兼容性限制、默认假设等
最佳实践
| 规则 | 说明 |
|---|---|
| 避免贪婪 | 用 *? +? 替代 * +,除非确定要贪婪 |
| 锚定边界 | 校验用 ^...$,搜索不需要 |
| 命名捕获组 | 通用语法 (?<name>...)(PCRE/JS/Go);Python 用 (?P<name>...) |
| 转义要完整 | . | ( ) [ ] { } ^ $ * + ? 这些都需要转义 |
| 不要过度复杂 | 多个简单正则比一个巨无霸好维护 |
快速使用
以下示例展示用户触发本 skill 的典型输入模式:
# 写正则(路径A:标准生成)
写个正则匹配中国大陆手机号
# 替换(路径A)
把 YYYY-MM-DD 格式的日期换成 MM/DD/YYYY
# 校验正则(路径B:审查/解释)
帮我校验这个正则:/^[\w\.-]+@[\w\.-]+\.\w+$/
# 解释正则(路径B)
解释一下这个正则什么意思:/^(?=.*[A-Z])(?=.*\d).{8,}$/
# 提取内容(路径A:标准生成)
从这段文本里提取所有 URL:...
# 模糊需求(路径C:需追问)
帮我写个正则校验用户输入
参考资料
- 常用模式速查: references/cheat-sheet.md