preg_replace_callback替换preg_replace的两个数组的问题

极客导航  2018-12-02 15:47  阅读 93 次 评论 0 条


推荐使用 读书导航 极客导航125啦极客导航(http://www.125la.com/jike.html)

PHP版本升级后preg_replace过期了,虽然都可以用,为了安全考虑,PHP官方推荐使用preg_replace_callback替代。

php手册

(PHP 4 >= 4.0.5, PHP 5, PHP 7)  preg-replace-callback

(PHP 4, PHP 5, PHP 7)  preg_replace

下面例子摘抄于《preg_replace_callback替换数组问题?》,感谢给力的网友。

最近我也在学习这个,因此摘抄于此记录一下。

$tpl = preg_replace(
    ['/\s*([,;:\{\}])\s*/', '/[\t\n\r]/', '/\/\*.+?\*\//'],
    ['\\1', '', ''],   
    $tpl
);

得到赞同的回答如下

$newText = preg_replace_callback(
    '/(.*?)(\s*([,;:\{\}])\s*)(.*?)([\t\n\r])(.*?)(\/\*.+?\*\/)(.*?)/i',
    function($match){
        $replaceArr = ['\\1', '', ''];
        return $match[1].$replaceArr[1].$match[3].$replaceArr[2].$match[5].$replaceArr[3].$match[7];
    },
    $yourText
); 

使用者类似的方式,发现不太对,得不到我想要的结果。

因此另外寻找其他方法。

--------------------------------正确的方法--------------------------------

在其他地方,参考外国博客(忘记地址了)参考类似的思路,使用下面的就可以解决preg_replace_callback中使用两个数组preg_replace_callback

$value = array('/\s*([,;:\{\}])\s*/', '/[\t\n\r]/', '/\/\*.+?\*\//');

$replace = array(
    function ($matches) {
        return $matches[1];
    },
    function ($matches) {
        return "";
    },
    function ($matches) {
        return "";
    });

#$content 存放结果
for ($i = 0; $i < count($value); $i++) {
    $content = preg_replace_callback($value[$i], $replace[$i], $content);
}

答案只是参考,自己多验证行。

当然如果你的是PHP7以上的,那就更简单了,那就可以使用preg_replace_callback_array这个,这个对于数组更简单

php手册:preg_replace_callback_array

    return preg_replace_callback_array(
        [
            $search[0] => function ($matches) {
                return matches[1];
            },
            $search[1] => function ($matches) {
                return "";
            },
            $search[2] => function ($matches) {
                return "";
            }
        ],
        $content
    );

以上仅供参考,谢谢。

希望读者把 http://www.125la.com/ 设置为您的主页,多谢

本文地址: https://www.125la.com/746.html
关注我们:请关注一下我们站长微信:扫描二维码125啦读书导航的微信号,微信号:yudemi(十三少)
版权声明:本文为原创或转载文章,版权归原作者所有,欢迎分享本文,转载请保留出处!
第一个读书导航

发表评论


表情