Есть ли в PHP оптимизатор регулярных выражений? - PullRequest
2 голосов
/ 02 июля 2010

Perl имеет Regexp :: Optimizer , есть ли что-нибудь подобное в PHP?Мой поиск ничего не дал.

Например, Regexp :: Optimizer превратит

/foobar|fooxar|foozap/

в

/foo(?:[bx]ar|zap)/

Обновление: Я хотел, чтобы этот вопрос был действительно коротким, чтобы люди не пытались его чрезмерно истолковать, но оказалось, что он имел противоположный эффект.Я ищу что-то, что принимает регулярное выражение и выводит функционально эквивалентное, но более эффективное регулярное выражение.Я нашел такую ​​вещь в Perl, но ни одной в PHP, и мне интересно, существует ли такая вещь.В этом отношении я ожидаю ответа «да / нет», сопровождаемого ссылкой, если применимо.Спасибо и извините за путаницу.

Ответы [ 4 ]

1 голос
/ 02 июля 2010

Поскольку PCRE поддерживает синтаксис Perl, просто используйте модуль Perl. В PHP есть расширение для мгновенного вызова кода Perl. Но вы можете просто выполнить его и кэшировать результат, если вам не нужно «живое» преобразование:

 $re = exec('perl -M"Regexp::Optimizer" -e 'print Regexp::Optimizer->new->optimize(qr'.escapeshellcmd($re).')';
1 голос
/ 02 июля 2010

Вы можете передать опцию S регулярному выражению, которое будет изучать его во время первой компиляции (регулярное выражение кэшируется после этого до тех пор, пока сценарий не умрет)

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

Это подробнодовольно хорошо в главе PHP в Освоение регулярных выражений под ред.3 и в конкретном примере, который вы приводите, он будет полезен для оптимизации.

Редактировать: На самом деле, если подумать немного об этом, ему даже не понадобится опция S, так как PCRE оптимизирует ееконкретный пример сам по себе.В качестве лучшего примера можно привести несколько начальных символов, например,

/foobar|barfoo|helloworld/S

. Как тогда будет выглядеть только элемент, начинающийся с [fbh]

1 голос
/ 02 июля 2010

нет (afaik), но выполняйте функции ctype для базовой проверки, когда люди часто используют регулярные выражения.

0 голосов
/ 02 декабря 2010

Итак, как оказалось, с 1 декабря 2010 года универсального оптимизатора регулярных выражений для PHP не существует.

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