无论如何在php正则表达式中默认设置“无反向引用”?

时间:2011-09-10 18:13:14

标签: php regex web

我知道正则表达式引擎移动得更快,而无需跟踪反向引用。我也知道我可以在括号内部的开头添加?:,以防止正则表达式引擎执行反向引用。

然而,无论如何我可以反转行为,使得不匹配成为默认行为?(而不是像U标志)

2 个答案:

答案 0 :(得分:4)

简答:不。

PHP使用PCRE库来解析正则表达式。

PCRE使用基于NFA的解析器来跟踪反向引用。您所描述的是基于DFA的解析器或Thompson NFA。

我不是PHP开发人员,但PCRE库确实带有“DFA模式”。大多数Linux发行版都会配备“pcretest”。如果你没有它,它会附带PCRE库。

在CLI中:

$ pcretest
  re> /(foo)\1/
data> foofoo
  0: foofoo
  1: foo

现在,如果我们使用“-dfa”标志运行它:

$ pcretest -dfa
  re> /(foo)\1/
data> foofoo
Error -16

您可能还想查看“占有量词”以防止回溯。

答案 1 :(得分:1)

您可以尝试使用PHP PECL RE2 http://pecl.php.net/package/re2