加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

扩展的正则表达式是否支持反向引用?

发布时间:2020-12-14 06:25:53 所属栏目:百科 来源:网络整理
导读:扩展正则表达式的维基百科 says“放弃了对反向引用的支持”,因此必须使用“基本”正则表达式模式来启用它们.但是,似乎许多实现都支持扩展正则表达式的反向引用.例如,在Ubuntu Precise上使用gcc 4.6,它们是受支持的. FreeBSD实现 seem to仅在基本模式下支持它
扩展正则表达式的维基百科 says“放弃了对反向引用的支持”,因此必须使用“基本”正则表达式模式来启用它们.但是,似乎许多实现都支持扩展正则表达式的反向引用.例如,在Ubuntu Precise上使用gcc 4.6,它们是受支持的. FreeBSD实现 seem to仅在基本模式下支持它们.

Boost says(并且似乎同意维基百科),扩展正则表达式不支持反向引用,但Boost :: Regex将它们作为扩展名添加.

这只是标准中一个定义不明确的部分,每个实现的解释都不同吗?

正如其他人已经指出的那样,很明显POSIX ERE不支持反向引用.

OpenGroup基本规范第7期中未添加对ERE的反向引用的基本原理如下:

It was suggested that,in addition to interval expressions,back-references ( ‘n’ ) should also be added to EREs. This was rejected by the standard developers as likely to decrease consensus.

引用自:Rationale: Base Definitions: Extended Regular Expressions

这种限制的主要原因是允许POSIX ERE转换为确定性有限自动机(DFA),事实上,Unix中ERE的原始实现是作为DFA完成的.使用DFA可以保证实现的性能.与(无限数量)反向引用的模式匹配是NP难问题,甚至可能是NP完全问题.如果为ERE提出反向引用,就永远无法达成POSIX标准委员会的共识,因为这将迫使所有使用原始Unix实现的公司将其代码更改为非确定性实现并放弃其性能保证,并且这些公司中有委员会成员.

还注意到RE中的反向引用对于用户或实现者来说都不直观,并且实际上它们比现在更经常引起极度混淆.例如,参见RE-Interpretation: The Dark Corners中给出的示例

注意:RE中的反向引用与诸如sed之类的工具中的替换文本中对子模式的引用不同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读