Заменить устаревшее preg_replace / e с preg_replace_callback

$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 преобразует двойную кавычку " в \" .