维基百科说是扩展的正则表达式“掉线反向引用的支持”,因此,“基本的”正则表达式模式已被使用,以使本。 然而,似乎多种实施方式不支持扩展的正则表达式反向引用。 例如,在Ubuntu精确GCC 4.6,他们的支持。 FreeBSD的实现似乎支持他们只能在基本模式。
升压说 (似乎与维基百科也同意),反向引用不支持扩展的正则表达式,但的boost ::正则表达式并将它们作为一个扩展。
这只是这是由每一个实现不同的解释标准的定义不清的一部分吗?
维基百科说是扩展的正则表达式“掉线反向引用的支持”,因此,“基本的”正则表达式模式已被使用,以使本。 然而,似乎多种实施方式不支持扩展的正则表达式反向引用。 例如,在Ubuntu精确GCC 4.6,他们的支持。 FreeBSD的实现似乎支持他们只能在基本模式。
升压说 (似乎与维基百科也同意),反向引用不支持扩展的正则表达式,但的boost ::正则表达式并将它们作为一个扩展。
这只是这是由每一个实现不同的解释标准的定义不清的一部分吗?
正如其他人已经指出,这是很清楚,POSIX ERES不支持反向引用。
在OpenGroup的基本规格问题7给出了不添加到ERES反向引用的理由给出如下:
有人建议,除了间隔表达式中,反向引用(“\ n”)也应该被添加到ERES。 这是通过标准的开发商可能会降低共识拒绝。
:引自理由:基本定义:扩展正则表达式
这种限制的主要原因是,以允许POSIX ERES转换为确定性有限自动机(DFA),以及确实在Unix的原始实现ERES的做为DFA。 使用DFA允许对执行的性能作出保证。 图案(无界数)反向引用匹配是一个NP难问题,甚至NP完全问题。 共识在POSIX标准委员会可如果反向引用提出了ERES,因为这会利用原有的Unix实现他们的代码更改为一个非确定性执行强制所有公司,并放弃他们的性能保证永远不会被达到,有些这些公司对委员会成员。
人们还注意到,在RE的反向引用不直观用户或执行者,而事实上他们往往比现在造成极度混乱。 见例如在给出的例子重新诠释:暗角
注:在res反向引用是不一样的子模式,以取代文字工具,如sed的引用。
按照IEEE /公开组标准的扩展正则表达式不支持反向引用(第9.5.1节),尽管一些现实世界中的实现做。
按照POSIX.1-2008标准 ,只有基本的正则表达式反向引用。 第9.3.6节描述了他们在BREs是如何工作的。 扩展的正则表达式部分并没有提到他们在所有的,而语法词法约定在第9.5.1说,回引令牌仅适用于BREs里面。