在带有反向引用的扩展正则表达式中,在关联组之前进行反向引用是否有效?
例如,模式\1(a)
有意义吗?它匹配什么?
答案 0 :(得分:2)
仅靠正则表达式\1(a)
不能在支持forward referencing的正则表达式中产生匹配。为什么?因为尚未处理引荐捕获组。但是它们在量化集群中使用时意味着一些东西,例如(...)+
。对matching nested brackets的尝试是使用前向引用。
如果您正在编写正则表达式引擎,是否应在编译时拒绝此类模式?应该接受但绝不匹配吗?
对此没有绝对的答案。 JavaScript不支持前向引用,但也没有抱怨。而是匹配零长度位置。 Boost引擎抛出错误,PCRE以另一种方式处理它。
应否将backref视为空字符串,因此该模式将匹配
a
?
JS就是这种情况。实际上,没有为此类行为定义标准。某个时候某个人决定将所有引擎特性都实现为自己的风格。
答案 1 :(得分:0)
\1(a)
is valid,但是它可能不会返回任何内容。有一些语句有时可以用于实现特定的技巧,但是可能不能用于其原始目的。
(?:\1(a)|(a))
This RegEx可能是一个粗糙的示例:
\??