Точка теряет свое особое значение внутри класса символов - другими словами, [.\s]
означает «период совпадения или пробел». Я считаю, что вы хотите, чтобы [\s\S]
, "сопоставить пробел или не пробел".
preg_replace('/#BIZ[\s\S]*#ENDBIZ/', 'my new text', $strMultiplelines);
Редактировать: Немного о точечных и символьных классах:
По умолчанию точка не соответствует символу новой строки. В большинстве (всех?) Реализаций регулярных выражений есть способ указать, что он также соответствует символу новой строки, но отличается от реализации. Единственный способ сопоставить (действительно) любой символ совместимым способом - это связать сокращенный класс с его отрицанием - [\s\S]
, [\w\W]
или [\d\D]
. По моему личному опыту, первое кажется наиболее распространенным, вероятно, потому, что оно используется, когда вам нужно сопоставить символы новой строки, и включение \s
дает понять, что вы делаете это.
Кроме того, точка - не единственный специальный символ, который теряет свое значение в классах символов. Фактически, единственными символами, которые являются особыми в классах символов, являются ^
, -
, \
и ]
. Ознакомьтесь с разделом «Метасимволы внутри классов символов» на странице классов символов на Regular-Expressions.info .