替换preg_replace

Web  2018年12月2日 pm3:47发布6年前 (2018)更新 城堡大人
81 0 0

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

 历史上的今天

  1. 2023: 《MySQL基础教程》笔记7(0条评论)
  2. 2019: 陈忠实:马罗大叔(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

JNI动态注册封装C++版

前言之前JNI一直用C语言写,但发现Android Framework中大都用C++写,为了阅读方便,改为C++。其实C++跟C语言写法一样的,只不过C++更简洁些。正文修改点,举个例子不同点hello.c文件后缀改为hello.cpp,还有就是C++传入的参数更少,看起来更简洁。he...

再谈Android日夜模式

前言之前介绍过Android日夜模式的使用,日夜模式是Android高版本自带的一种模式,很方便也很使用。如果换肤只有2种皮肤,这个是最佳选择,因为Android日夜模式只要按照规则即可实现。虽然介绍过,但很多细节还是没有说明白,因此由写一篇流水文,方便自己回顾。正文日夜模式就是我们常说的...

吴念真:饱了别人,瘦了自己

当我们第一眼看到阿婆的自助餐厅时,还以为自己找错了地方呢!以为自己走入了一个工地的厨房,一个受雇的欧巴桑正准备免费的午餐,等待忙了一个早上的工人,让他们填饱肚子。话说回来,这样的印象跟事实其实相去不远。经营这家没有招牌的自助餐厅的阿婆庄朱玉女士,唯一的经营哲学就是让你吃到饱!今年七十六岁的她,从早...

林清玄:再加两个苹果

一位小学老师对我说起,他怎么使一班小学生被改造的秘诀。他的学生在低年级的时候遇到一个非常严格的老师,给学生的作业很多,而给学生的评价却很低。在这位老师的笔下很少有学生可以得到甲,得到乙已经很不错,有许多学生拿到丙、丁,使得学生的家长对自己的孩子都不谅解,学生对学习也逐渐失去信心了。当这班学生升到...

林清玄:幸福的无关

我小时候对汽水有一种特别奇妙的向往,原因不在汽水有什么好喝,而是由于喝不到汽水。我们家是有几十口人的大家族,小孩依序排行就有18个之多,记忆里东西仿佛永远不够吃,更别说喝汽水了。喝汽水的时机有三种,一种是喜庆宴会,一种是过年的年夜饭,一种是庙会节庆。即使有汽水,也总是不够喝。到要喝汽水时好像进行一...

SQLite中的数据排序简介

前言本文摘抄,记录Sqlite使用不同的排序方式对各种数据类型进行排序。方便自己查阅和使用。正文下面只摘抄了一部分。普通排序文本类型(Text/String):按字典顺序排序:使用ORDER BY语句,并在字段名称后添加COLLATE NOCASE。例如:SELECT * FR...