用preg_replace_callbackreplace已弃用的preg_replace / e
$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 );
除了更快,这也将正确处理您的string中的双引号。 您使用/e
当前代码会将双引号转换为"
\"
。