替换preg_replace

Web 3xcn.com@站长2018年12月2日 pm3:47发布1年前 (2023)更新
0
导航号,我的单页导航

推荐使用 读书导航 极客导航125啦极客导航(http://www.91es.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.91es.com/ 设置为您的主页,多谢

版权声明 1、 本站名称 91易搜
2、 本站网址 https://www.91es.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权请留言
4、 本站禁止发布或转载任何违法的相关信息,如有发现请向站长举报
导航号,我的单页导航

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

暂无评论...