Модификаторы в PHP

Модификаторы m и s

Пока мы не обращали внимание на то, что наши регулярки могут обрабатывать не только однострочные строки, но и многострочные (те, где есть enter-ы - переводы строк).

{:}## ~$str = '## ~~первая подстрока## ~~вторая подстрока## ~';## {/}

Регулярки имеют два режима поиска и замены: многострочный и однострочный.

Многострочный режим явно задается с помощью модификатора m, а однострочный - с помощью модификатора s.

Давайте посмотрим разницу между этими режимами:

Многострочный:

Шляпка ^ соответствует началу каждой подстроки, а $ - концу:

{:}## ~$str = '## ~~^первая подстрока$## ~~^вторая подстрока$## ~';## {/}

Вместо ^ для начала всей строки следует использовать \A, а вместо $ для конца всей строки - \z.

Точка совпадает с любым символом, за исключением перевода строки (точнее она не совпадает со \n, а со \r совпадает!).

Однострочный:

Шляпка ^ соответствует началу всей строки, а $ - концу:

{:}## ~$str = '^## ~~первая подстрока## ~~вторая подстрока## ~$';## {/}

Точка совпадает с любым символом.

Внимание!!! По умолчанию функции поиска preg_match и preg_match_all работают в многострочном режиме (будто добавлен модификатор m), а поиска и замены preg_replace - в однострочном (будто добавлен модификатор s)!

Исправляйте добавлением соответствующего модификатора (при необходимости).