как работает preg_match?

  • Автор темы Автор темы Redjik
  • Дата начала Дата начала

Redjik

Джедай-мастер
Насколько я понял, в zend vm встроен PCRE (судя по собственному опкоду для preg_*)
Передаем первым параметром (pattern) массив.
Строка (subject) проверяется один раз на все вхождения или на каждое вхождение циклически O(n + m)?

Ненагуглил, исходник pcre мозгов пока не хватает изучить.
В исходниках php ответа нет.
 
Последнее редактирование:
Строка (subject) проверяется один раз на все вхождения или на каждое вхождение циклически O(n)?
А что, один раз по-твоему — это не O(n)? Или, постой, ты думаешь, что можно магическим образом заматчить подстроку за O(1) какой бы строка ни была длины?
 
поправил, спасибо

ЗЫ. заставил задуматься... при любом раскладе будет циклический поиск подстроки, что в случае с
, что в случае с массивом, ибо поиск в подстроке уже O(n)
 
Последнее редактирование:
Хм, оказывается только preg_replace принимает первым параметром массив, и его поведение можно легко проверить

Код:
root@ubuntu:~# php -r "var_dump(preg_replace(['#bar#','#foo#'],['foo','zoo'],'bar'));"
string(3) "zoo"

ЗЫ. На удивление, спасибо Вурдалаку, заставил подумать головой, а не руками.
 
php -r "var_dump(strtr('hi all, i say hello', ['hello'=>'hi','hi'=>'hello']));"
string(19) "hello all, i say hi"

правда без регексов
 
спасибо, но меня интересовал именно preg_*
исследовал работу с вики разметкой
 
Сверху