使用preg_replace_callback替换已弃用的preg_replace / e

时间:2013-10-08 10:27:41

标签: php preg-replace preg-replace-callback php-5.5

$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()

1 个答案:

答案 0 :(得分:65)

您可以使用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的当前代码会将双引号"转换为\"