Привет, у меня есть следующий preg_replace_callback, который я использую в своей системе шаблонов для выполнения кода внутри {{ php code идет здесь }}
preg_replace_callback('/\{\{(.*?)\}\}/', function($match) {
echo "<pre>";
var_dump($match);
echo "</pre>";
}, $string);
когда код является одной строкой
$string = '{{ echo "Hello"; }}'
его рабочий предел и результат сброса
array(2) {
[0]=>
string(19) "{{ echo "Hello"; }}"
[1]=>
string(15) " echo "Hello"; "
}
но когда код мультилиний
$string = '{{
echo "Hello";
echo " My name is Ntan";
}}'
я не получаю никаких дампов, потому что это не соответствует
Может ли кто-нибудь мне помочь?
Используйте модификатор s
, который заставляет точку соответствовать новой строке:
preg_replace_callback('/\{\{(.*?)\}\}/s', function($match) {
echo "<pre>";
var_dump($match);
echo "</pre>";
}, $string);
/m
если вы хотите использовать многострочное регулярное выражение - php.net/manual/en/reference.pcre.pattern.modifiers.php^
,$
), то есть модификатор s (для однострочного <= имя немного нелогично ) позволяет точке совпадать с новыми строками . (а в Ruby модификатор m позволяет точке соответствовать символам новой строки и не меняет значения якорей)