【问题标题】:Replace deprecated preg_replace /e with preg_replace_callback [duplicate]用 preg_replace_callback 替换已弃用的 preg_replace /e [重复]
【发布时间】:2013-10-15 05:29:13
【问题描述】:
$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()

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • [a-zA-Z0-9_] 应缩短为 \w{0,1}?i 模式修饰符用于有用的目的。
    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 2014-04-13
    • 2013-03-05
    相关资源
    最近更新 更多