快速入门
教程
工具和语言
示例
参考
书评
正则表达式教程
简介
目录
特殊字符
不可打印字符
正则表达式引擎内部
字符类别
字符类别减法
字符类别交集
速记字符类别
词边界
交替
可选项
重复
分组和捕获
反向引用
反向引用,第 2 部分
命名组
相对反向引用
分支重置组
自由间距和注释
Unicode
模式修饰符
原子分组
占有量词
前瞻和后顾
环视,第 2 部分
保持文本不匹配
条件
平衡组
递归
子例程
无限递归
递归和量词
递归和捕获
递归和反向引用
递归和回溯
POSIX 方括号表达式
零长度匹配
继续匹配
本网站上的更多内容
简介
正则表达式快速入门
正则表达式教程
替换字符串教程
应用程序和语言
正则表达式示例
正则表达式参考
替换字符串参考
书评
可打印 PDF
关于本网站
RSS Feed 和博客
RegexBuddy—Better than a regular expression tutorial!

相对反向引用

一些应用程序支持相对反向引用。这些应用程序使用负数来引用反向引用前面的组。要找到相对反向引用引用的组,请取反向引用的绝对值,并从反向引用开始,从右向左遍历正则表达式,计算出 (命名或未命名) 捕获组的许多左括号。因此,(a)(b)(c)\k<-1> 匹配 abcc(a)(b)(c)\k<-3> 匹配 abca。如果反向引用在捕获组内,则还需要计算该捕获组的左括号。因此,(a)(b)(c\k<-2>) 匹配 abcb(a)(b)(c\k<-1>) 无法匹配或出错,具体取决于应用程序是否允许嵌套反向引用

嵌套反向引用的语法差异很大。它通常是命名反向引用语法的扩展。JGsoft V2Ruby 1.9 及更高版本支持 \k<-1>\k'-1'。虽然这看起来像 .NET 命名捕获的语法,但 .NET 本身不支持相对反向引用。

Perl 5.10、PCRE 7.0、PHP 5.2.2 和 R 支持 \g{-1}\g-1

Boost 从 Boost 1.42 开始支持 Perl 语法。Boost 从 Boost 1.47 开始添加 Ruby 语法。为了使问题复杂化,Boost 1.47 允许这些变体相乘。Boost 1.47 及更高版本允许使用 \g\k 以及大括号、尖括号或引号指定相对反向引用。这使得六种变体加上 \g-1,总共七种变体。这使得 Boost 与 Ruby、PCRE、PHP、R 和 JGsoft 发生冲突,后者将 \g 与尖括号或引号和负数视为 相对子例程调用