关联组之前的反向引用

时间:2019-04-21 21:37:04

标签: regex regex-group backreference

在带有反向引用的扩展正则表达式中,在关联组之前进行反向引用是否有效?

例如,模式\1(a)有意义吗?它匹配什么?

2 个答案:

答案 0 :(得分:2)

仅靠正则表达式\1(a)不能在支持forward referencing的正则表达式中产生匹配。为什么?因为尚未处理引荐捕获组。但是它们在量化集群中使用时意味着一些东西,例如(...)+。对matching nested brackets的尝试是使用前向引用。

  

如果您正在编写正则表达式引擎,是否应在编译时拒绝此类模式?应该接受但绝不匹配吗?

对此没有绝对的答案。 JavaScript不支持前向引用,但也没有抱怨。而是匹配零长度位置。 Boost引擎抛出错误,PCRE以另一种方式处理它。

  

应否将backref视为空字符串,因此该模式将匹配a

JS就是这种情况。实际上,没有为此类行为定义标准。某个时候某个人决定将所有引擎特性都实现为自己的风格。

答案 1 :(得分:0)

\1(a) is valid,但是它可能不会返回任何内容。有一些语句有时可以用于实现特定的技巧,但是可能不能用于其原始目的。

(?:\1(a)|(a))

enter image description here

This RegEx可能是一个粗糙的示例:

\??

enter image description here