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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

↑