用途
本技能用于正则表达式的编写、理解与调试,提供语法速查、常用模式配方和跨语言参考。当用户需要“写一个正则”“匹配某个模式”“校验邮箱”等任务时,可借助其中的语法说明与示例完成。
主要能力
核心语法
- 字符类:
.、\d/\D、\w/\W、\s/\S、[abc]、[^abc]、[a-z]、[a-zA-Z],以及 Unicode 属性\p{L}、\p{N}。 - 量词:
*、+、?、{3}、{3,}、{3,5},以及懒惰版本*?、+?、??和占有版本*+、++(PCRE/Java)。 - 锚点与边界:
^、$、\b、\B、\A、\Z。 - 分组与引用:捕获组
(abc)、非捕获组(?:abc)、命名捕获组(?<name>abc)(JS/PCRE/.NET)与(?P<name>abc)(Python)、反向引用\1、\k<name>、(?P=name)、原子组(?>abc)。 - 前后查找:正/负向前查找
(?=abc)、(?!abc),正/负向后查找(?<=abc)、(?<!abc),并说明各引擎对后查找长度的限制。 - 标志位:
g、i、m、s、u、x,以及内联写法(?i)、(?i:abc)。
常见模式
提供校验类模式,包括简化邮箱、URL、美国电话、严格 IPv4、YYYY-MM-DD 日期、UUID v4、Semver、十六进制颜色、强密码、Slug、JWT 结构;提取类模式,包括从 URL 取域名、从路径取文件名、数字、键值对、Markdown 链接、日志行;以及替换模式,如姓名调换、camelCase 转 snake_case、删除 console.log 行。
语言级用法
- JavaScript:字面量与构造函数、
test、match、matchAll、replace、命名组、后查找(ES2018+)。 - Python:
re.match、re.search、re.findall、re.sub、re.compile、命名组、re.VERBOSE。 - Go:
regexp.MustCompile、MatchString、FindString、FindAllString、ReplaceAllString、命名组;说明 Go 使用 RE2,不支持反向引用与前后查找,保证线性时间。 - Rust:
regexcrate 的is_match、find、命名捕获;说明其语义类似 RE2,PCRE 特性需用 fancy-regex。
引擎差异对比
以表格形式对比 PCRE、ECMAScript、POSIX ERE、RE2、Python re 在前后查找、命名组、反向引用、原子组、占有量词、Unicode 属性、递归模式上的支持情况。
CLI 与编辑器工具
- grep:BRE、ERE(
-E)、PCRE(-P)、-oirn组合。 - sed:替换、扩展正则分组、删除匹配行。
- awk:模式匹配打印、字段正则匹配。
- ripgrep:递归搜索、按文件类型过滤、多行匹配、PCRE2、替换输出。
- VS Code 查找替换:启用正则、捕获组替换、大小写修饰符
\u、\U、\l、\L。
性能与安全
说明嵌套量词导致的灾难性回溯,给出危险与安全写法对照;介绍 ReDoS 缓解措施,包括使用 RE2 类引擎、设置超时、限制输入长度、不从未受信输入构建正则。
Unicode 与多行模式
介绍 \p{L}、CJK 区间、Emoji 属性,JS 中 u 标志的必要性,Python 3 默认 Unicode 行为,以及 m、s 标志和 [\s\S] 跨行匹配。
测试与调试
提及 regex101.com、regexr.com、Python re.DEBUG,并建议增量构建正则。
不适用场景
HTML/XML 应使用解析器,JSON 应使用 JSON.parse,平衡嵌套需解析器生成器,严格邮箱/URL 校验应使用库,超长难读模式应改用代码。
使用方式
该技能以参考文档形式提供,包含语法说明、模式配方与代码示例。用户可在编写或调试正则时查阅对应章节,按语言选择相应示例。
适用场景
文本校验、数据提取、批量替换、日志解析、跨语言正则迁移、CLI 文本处理、编辑器批量编辑等。
限制
资料未提供该技能的安装方式、运行环境要求、收费信息或平台支持范围,暂未提供。部分特性(如后查找、占有量词、原子组)依赖具体引擎,需按引擎差异表确认。