Есть ли в любом случае, чтобы установить «без обратной ссылки», как по умолчанию в PHP регулярных выражений? - PullRequest
1 голос
/ 10 сентября 2011

Мне известно, что движок регулярных выражений движется значительно быстрее, не отслеживая обратные ссылки.Я также знаю, что я могу добавить ?: в начале внутренней части скобок, чтобы не дать обработчику регулярных выражений выполнить обратную ссылку.соответствие становится поведением по умолчанию? (скорее как флаг U)

Ответы [ 2 ]

4 голосов
/ 11 сентября 2011

Краткий ответ: нет.

PHP использует библиотеку PCRE для анализа регулярных выражений.

PCRE использует анализатор на основе NFA, который отслеживает обратные ссылки.То, что вы описываете - это анализатор на основе DFA или NFA Thompson.

Я не разработчик 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 голос
/ 24 февраля 2012

Вы можете попробовать использовать PHP PECL RE2 http://pecl.php.net/package/re2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...