一尘不染

用preg_replace_callback替换不推荐使用的preg_replace / e [重复]

php

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


阅读 354

收藏
2020-05-29

共1个答案

一尘不染

您可以使用匿名函数将匹配项传递给函数:

$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会将双引号"转换为\"

2020-05-29