Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Компиляция регулярок в PHP


Автор: BobiKK 26.7.2006, 08:52
Сообственно, сабж. Порылся в гуглях, что-то ответа так и не нашел. Компилируются ли регулярки в PHP? 

Автор: szz 26.7.2006, 09:24
Неа ))) 

Автор: ZlojEzh 26.7.2006, 09:30
не знаю, это ли ты имел ввиду, но посмотри http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php, модификатор S 

Автор: BobiKK 26.7.2006, 09:57
По описанию, конечно, похоже на аналог компиляции регулярок в PERLe, но почему слово компиляция не употребляется? smile 

Автор: szz 26.7.2006, 10:32
Не это совсем не то.
   Ты имел ввиду, что можно создать регулярку, скомпилировать ее и потом использовать с разными строками уже скомпиленную, чтоб быстрее работало? Так, как это можно делать в перле или в С?
  Так вот, в PHP этого делать нельзя - я тоже когда-то копался искал такое и ничего не нашел. 

Автор: BobiKK 26.7.2006, 10:39
Да мне просто не так давно справочник PERLовский попался, и там что-то было про компиляцию регулярок. Вот мне и интересно стало, есть ли такая фича в PHP 

Автор: szz 26.7.2006, 10:42
Да, компиляция регулярок это супер фича, если ей, конечно, уметь правильно пользоваться.
   там ведь прикол в том, что на компиляцию тратится время, и если ты собираешься использовать регулярку всего один-два раза, то лучше ее не компилировать - быстрее будет.
 Но все эти разглогольствования никчему, ибо в PHP такого нету!  

Автор: BobiKK 27.7.2006, 08:36
Хм, а другие источники сказали, что компилятся smile

Добавлено @ 08:39 
Во, у кого-то откопал:
Код

Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 4419 in 
 

Автор: szz 27.7.2006, 10:58
Блин, разумеется движку надо привести этото стринг, который ты ему даешь, в какой-то удобоваримый для себя код )))

   Я имею ввиду следующее:
Сделай так, чтоб какое-то выражение скомпилировалось и хранилось отдельно - и потом чтоб ты мог свое это отдельно хранящееся скомпилированное выражение использовать для поиска в 100 разных строках текста!
    Именно скомпилированное - не строку с регулярной абракадаброй, а именно необратимо скомпиленный байт-код, соответствующий выражению.
    Сделал? Нет, не сделал. А почему? А потому, что такое невозможно в PHP.
   

А что касается таких источников, как php шные логи, то могу тебе следующее показать:
Цитата
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in D:\htdocs\index.php on line 9

   Скажи мне, что ты понял из этого сообщения.
 О чем тебе говорит фраза T_PAAMAYIM_NEKUDOTAYIM? 

Автор: vasac 27.7.2006, 11:35
Скомпилировать то регулярку для того чтобы потом ее уже скомпиленную использовать нельзя. Однако когда она комилится движком результат кэшируется и если вызвать ту же регулярку второй раз, она будет работать уже быстрее. 

Автор: GiV 27.7.2006, 11:46
Цитата(szz @  27.7.2006,  10:58 Найти цитируемый пост)
 О чем тебе говорит фраза T_PAAMAYIM_NEKUDOTAYIM?  

С Вашим то местом проживания грешно не знать =) (2 раза двоеточие, только PHP5 версии). Ловил такую ошибку на конструкции
Код

$adapterName = $adapter . 'DatabaseAdapter';

return $adapterName::connect( $dbHost, $dbUser, $dbPassword, $dbName );
 

Автор: szz 27.7.2006, 11:53
Я-то прекрасно знаю )))   Просто я хотел подчеркнуть то, что порой разработчики пхп ошибаются.  Люди ведь, млин!

Цитата
Скомпилировать то регулярку для того чтобы потом ее уже скомпиленную использовать нельзя. Однако когда она комилится движком результат кэшируется и если вызвать ту же регулярку второй раз, она будет работать уже быстрее.

   Понятно это, но никаких средств по управлению этим у меня нет Это как автомобилем с автоматической коробкой управлять smile  Если меня спросят "Как мне переключить с третьей на вторую?" я отвечу - "никак!"

   Вот в С я обязан сам регулярки компилить, возиться с этим (что, кстати, делать не хочется) вручную. Можно, конечно, обертку сделать. Как всегда в С smile 

Автор: AztEK 27.7.2006, 12:18
PCRE по умолчанию кешируются. Так что можно считать, что и компилируются автоматически. 

Автор: BobiKK 27.7.2006, 12:20
Цитата(szz @  27.7.2006,  11:53 Найти цитируемый пост)
и меня спросят "Как мне переключить с третьей на вторую?" я отвечу - "никак!"

А секвентальный режим зачем тогда? smile
 

Автор: szz 27.7.2006, 12:28
Цитата
А секвентальный режим зачем тогда? 


Ну ладно, дадно, полноте спорить )))  Сдаюсь  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)