$result = preg_replace( "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/iseU", "CallFunction('\\1','\\2','\\3','\\4','\\5')", $result );
Приведенный выше код дает предупреждение об отказе после обновления до PHP 5.5:
Устаревший : preg_replace (): Модификатор / e устарел, вместо этого используйте preg_replace_callback
Как заменить код на preg_replace_callback()
?
Вы можете использовать анонимную функцию для передачи совпадений с вашей функцией:
$result = preg_replace_callback( "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/isU", function($m) { return CallFunction($m[1], $m[2], $m[3], $m[4], $m[5]); }, $result );
Помимо быстрого, это также будет правильно обрабатывать двойные кавычки в вашей строке. Ваш текущий код с помощью /e
преобразует двойную кавычку "
в \"
.