替换preg_replace

Web  2018年12月2日 pm3:47发布6年前 (2018)更新 91es.com站长
52 0 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. 2023: 《MySQL基础教程》笔记7(0条评论)
  2. 2019: 陈忠实:马罗大叔(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

史铁生:老家

常要在各种表格上填写籍贯,有时候我写北京,有时候写河北涿州,完全即兴。写北京,因为我生在北京长在北京,大约死也不会死到别处去了。写涿州,则因为我从小被告知那是我的老家,我的父母及祖上若干辈人都曾在那儿生活。查词典,籍贯一词的解释是:祖居或个人出生地。——我的即兴碰巧不错。可是这个被称为老家的地方,...

Android View Binding的使用简介

前言简单记录一下,方便自己查阅。好记性不如烂笔头正文PS: 本文内容大都摘抄,感谢什么是View BindingView Binding是Android Studio 3.6推出的新特性,目的是为了替代findViewById(内部实现还是使用findViewById)。在启动视图绑...

Linux signal 常见的信号含义表

前言简单记录一下Linux signal 常见的信号含义。PS : 本文摘抄,只是方便自己查阅而已。正文信号表 SIGHUP       1       /* Hangup (POSIX). */                         终止进程     终端线路挂断S...

张承志:听人读书

有两件杯水末梢的小事,总想把它们记下备忘。其实备忘是不必的,因为已经顽固不弃地把它们忆了这么久,记之纸笔毕竟还是因为感动--哪怕周围写大潮大势的多么热闹,我还是更重视自己这种真实的小小感情。都是听孩子念书。地隔千里:一处是北国边界乌珠穆沁草地,一处是贫瘠之冠的宁夏山区小村。在内蒙插队到了那个年...

[摘]Android多语言目录对照表

前言本文摘抄,原文链接在文末。有参与外销项目,对各国翻译存放的目录很懵,老是忘记哪个对应哪个,今天看到网上相关整理,摘抄于此,方便自己查阅。好记性不如烂笔头正文语言android文件夹名称中文values-zh-rCN英文(US)values英文(UK)...

WordPress常用的函数介绍

前言记录一下WordPress中的常用的条件判断函数和类型判断函数等。记录一下,方便自己查阅。正文基本条件判断is_home() : 是否为主页is_single() : 是否为内容页(Post)is_page() : 是否为内容页(Page)is_category() : 是否为C...