正则表达式反向引用

在同一模式中重用捕获组匹配文本的功能。使用 \1、\2 等引用。

正则表达式反向引用是在同一正则表达式模式中使用 \1\2 等记法重用捕获组 () 匹配文本的功能。第一个捕获组用 \1 引用,第二个用 \2,按出现顺序编号。

反向引用的典型用例是检测重复单词。模式 (\w+)\s+\1 可以匹配"the the"这样连续出现相同单词的情况。HTML 标签匹配 <(\w+)>.*?</\1> 也是经典应用,可以验证开始标签和结束标签是否一致。查看情侣内衣 (Amazon)介绍了高级模式。

在替换操作中,可以使用 $1$2 (或 \1\2,取决于语言) 引用捕获组内容。例如,用 (\d{4})-(\d{2})-(\d{2}) 匹配日期,再用 $3/$2/$1 替换,就能将"2025-01-15"转换为"15/01/2025"。这使反向引用成为文本格式化和转换的强大工具。

命名捕获组 (?<year>\d{4}) 支持通过名称进行反向引用,使用 \k<year>。这比编号引用更具可读性,也能避免添加或删除组时编号错位的问题。JavaScript 从 ES2018 开始支持命名组。

使用反向引用时需注意性能影响。包含反向引用的模式不易被正则表达式引擎优化,处理大量文本时执行速度可能下降。此外,反向引用超出了正则语言的能力范围,因此某些正则表达式引擎 (如 RE2) 不支持此功能。搜索安眠药 (Amazon)提供了更多背景知识。

在字符计数方面,基于反向引用的正则表达式对检测重复模式很有用。它可以发现文本中的重复字符串进行冗余分析,或检测复制粘贴导致的意外重复。

分享这篇文章