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

Redjik

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

Ненагуглил, исходник pcre мозгов пока не хватает изучить.
В исходниках php ответа нет.
 
Последнее редактирование:

Вурдалак

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

Redjik

Джедай-мастер
поправил, спасибо

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

Redjik

Джедай-мастер
Хм, оказывается только preg_replace принимает первым параметром массив, и его поведение можно легко проверить

Код:
root@ubuntu:~# php -r "var_dump(preg_replace(['#bar#','#foo#'],['foo','zoo'],'bar'));"
string(3) "zoo"
ЗЫ. На удивление, спасибо Вурдалаку, заставил подумать головой, а не руками.
 

accido

Новичок
php -r "var_dump(strtr('hi all, i say hello', ['hello'=>'hi','hi'=>'hello']));"
string(19) "hello all, i say hi"

правда без регексов
 

Redjik

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