2013-10-08 40 views
37
$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():该/ e修饰符已过时,使用preg_replace_callback代替

如何用preg_replace_callback()代替代码?

回答

52

您可以使用anonymous function的比赛传递给你的函数:

$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的当前代码会将双引号"转换为\"

相关问题