Оператор точки (.
) в регулярном выражении обычно соответствует любому одному символу, кроме переносов строк.Чтобы соответствовать им, вам нужно добавить флаг s
, чтобы сопоставитель обрабатывал ввод как одну строку.
Это проще всего сделать с помощью (?s)
.Это установит флаг для всего шаблона, поэтому будьте осторожны, если вы встраиваете его в более крупный шаблон.
$pattern = "(?s)(?=\$\[)(.*?)(?=\$\[)"
Кроме того, побочный эффект от использования упреждений ((?= )
) с обеих сторони при использовании ленивого повтора с нулем или более (*?
) он всегда будет соответствовать нулю символов.Вам может понадобиться изменить любой из этих параметров:
- Использовать упущение:
(?s)(?<=\$\[)(.*?)(?=\$\[)
. - Совпадение хотя бы с одним символом:
(?s)(?=\$\[)(.+?)(?=\$\[)
. - Измените первый прогноз на нормальный шаблон.
(?s)(\$\[.*?)(?=\$\[)
Дополнительная информация: