preg_replace_callback не совпадает, когда многострочный

1

Привет, у меня есть следующий 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"; 
}}'

я не получаю никаких дампов, потому что это не соответствует

Может ли кто-нибудь мне помочь?

  • 1
    Вам нужно использовать многострочный ключ /m если вы хотите использовать многострочное регулярное выражение - php.net/manual/en/reference.pcre.pattern.modifiers.php
  • 1
    @MarkBaker: модификатор m (многострочный) изменяет только якоря ( ^ , $ ), то есть модификатор s (для однострочного <= имя немного нелогично ) позволяет точке совпадать с новыми строками . (а в Ruby модификатор m позволяет точке соответствовать символам новой строки и не меняет значения якорей)
Показать ещё 1 комментарий
Теги:
preg-match

1 ответ

3
Лучший ответ

Используйте модификатор s, который заставляет точку соответствовать новой строке:

preg_replace_callback('/\{\{(.*?)\}\}/s', function($match) {
    echo "<pre>";
        var_dump($match);
    echo "</pre>";  
}, $string);
  • 0
    Спасибо, что спасли мой день
  • 0
    @ntan: Пожалуйста. Рад, что это помогает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню