php新版本号废弃 preg_replace /e 修饰符
近期serverphp版本号升级到了 5.6 发现出了非常多警告
preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
一開始没注意。后来发现 非常多这种警告,于是网上查了下 发现 php5.5版本号以上 就废弃了 preg_replace 函数中 /e 这个修饰符 /e 这个修饰符的意思 就是让 正则替换的 时候 替换规则 支持 php 代码
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWJ3MTIz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
那么 应该怎么办呢
事实上 仅仅要 把 preg_replace 里面 有 /e 修饰符的代码 改动成 preg_replace _callback 然后又一次写下就好了
样例
最简单的 写法
preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str)
改动成
preg_replace("/([A-Z])/",'gwyy', $str);
function gwyy($match) {
return '_'.strtolower($match[1]);
}
第二个參数是个 函数名 然后在外部写一个函数 可是 我们每次定义一个函数 感觉非常麻烦 所以我们能够用匿名函数
比方说
preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str)
改动成
preg_replace_callback('/([A-Z])/',
function ($matches) {
return '_' . strtolower($matches[0]);
},
$str)
就可以
这里特别警告 改动后 /([A-Z])/e 最后一个 e 一定要去掉 不然就出错了
假设在类里面 还能这么写
class a {
private $joinStr = "__AAAAA__";
public function __construct() {
$this->joinStr = preg_replace_callback("/__([A-Z_-]+)__/sU",array($this,'gwyy'),$this->joinStr);
echo $this->joinStr;
}
public function gwyy($match) {
print_r($match);
return 'aaa';
}
}
$a = new a();
第二个參数不是一个函数 而变成了一个数组 表示 调用 $this 类 里面的 gwyy 方法 运行 gwyy会自己主动接受到 一个 $match 參数表
以下再看一个略微复杂点的样例
$patterns = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/eis';
$replacement = "\$this->parseXmlTag('$tagLib','$tag','$1','')";
$content = preg_replace($patterns, $replacement,$content);
这个替换 使用了 类里面的自己定义方法 假设 你再 用匿名函数直接套的话 会提示 错误 由于 匿名函数上下文里面 并没有 该方法和 该变量 所以 要用 use() 来引入 同一时候 注意 一定要 把 正则里面 e 去掉
$that = $this;
$patterns = '/'.$begin.$parseTag.$n1.'\/(\s*? )'.$end.'/is';
$content=preg_replace_callback($patterns, function($matches) use($tagLib,$tag,$that){
return $that->parseXmlTag($tagLib,$tag,$matches[1],'');
},$content);
这里 用 $that 取代 $this; 好了 今天先记录到这里吧 。
小烟原创,转载请注明出处!
php新版本号废弃 preg_replace /e 修饰符的更多相关文章
- php新版本废弃 preg_replace /e 修饰符
php新版本废弃 preg_replace /e 修饰符 分类: PHP -- : 3531人阅读 评论() 收藏 举报 php正则 最近服务器php版本升级到了 5.6 发现出了很多警告 [php] ...
- 关于thinkhphp3.1中废弃 preg_replace /e 修饰符
警告:preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead 网上查了下 发现 php5.5版 ...
- .NET4.5新特性async和await修饰符实现异步编程
开篇 每一个版本的.net都会引入一些新的特性,这些特性方便开发人员能够快速实现一些功能.虽然.net版本一直在更新,但是新版本对旧版本的程序都是兼容的,在这一点上微软做的还是非常好的.每次学一个新内 ...
- [.net 面向对象编程基础] (8) 基础中的基础——修饰符
[.net 面向对象编程基础] (8) 基础中的基础——修饰符 在进入C#面向对象核心之前,我们需要先对修饰符有所了解,其实我们在前面说到变量和常量的时候,已经使用了修饰符,并且说明了变量和常量的修改 ...
- C# 中4个访问符和8个修饰符详解
4个访问修饰符(是添加到类.结构或成员声明的关键字) Public:公有的,是类型和类型成员的访问修饰符.对其访问没有限制. Internal:内部的,是类型和类型成员的访问修饰符.同一个程序集中的所 ...
- Python中@修饰符的作用。
'@'符号用作函数修饰符是python2.4新增加的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行.也就是说@A def f(): 是非法的. 只可以在模块或类定义层内对函数进行修饰, ...
- python函数修饰符@的使用
python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志.性能测试.事务处理等等. 创建函数修饰符的规则:(1)修饰符是一个函数(2)修饰符取被修饰函数为参数(3)修饰符返回一个新函数 ...
- VUE3 之 多个 v-model 绑定及 v-model 修饰符的使用 - 这个系列的教程通俗易懂,适合新手
1. 概述 洛克定律告诉我们: 当我们的目标很远大,远到我们都看不到终点时,放弃几率就会很大,就像跑马拉松比赛,由于时间长.距离长,很多选手都会选择在中途放弃. 其实有个好办法,就是拆分,把大目标拆分 ...
- 正则表达式preg_replace中危险的/e修饰符带来的安全漏洞问题
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit]) /e 修饰符使 preg_rep ...
随机推荐
- Scrapy应用之抓取《宦海沉浮》小说
目标站点 http://www.shushu8.com/huanhaichenfu/ 第一步:新建项目 KeysdeMacBook:Desktop keys$ scrapy startprojec ...
- pytorch中设定使用指定的GPU
转自:http://www.cnblogs.com/darkknightzh/p/6836568.html PyTorch默认使用从0开始的GPU,如果GPU0正在运行程序,需要指定其他GPU. 有如 ...
- [uiautomator篇][python] wifi接口学习网址
https://wifi.readthedocs.io/en/latest/wifi_command.html#usage
- 在ubuntu上安装npm
sudo apt install npm 执行上面的安装命令,会报错: Reading package lists... Done Building dependency tree Reading s ...
- CSU-1803: 2016 ,同余定理!
int main() { int n,m; while(~scanf("%d%d",&n,&m)) { int r1=n/2 ...
- POJ 1887 Testing the CATCHER
Testing the CATCHER Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 13396 Accepted: 4 ...
- 【bzoj1532】[POI2005]Kos-Dicing 二分+网络流最大流
题目描述 Dicing 是一个两人玩的游戏,这个游戏在Byteotia非常流行. 甚至人们专门成立了这个游戏的一个俱乐部. 俱乐部的人时常在一起玩这个游戏然后评选出玩得最好的人.现在有一个非常不走运的 ...
- BZOJ 3939 [Usaco2015 Feb]Cow Hopscotch ——线段树 CDQ分治
显然dp[i][j]=ps[i-1][j-1]-sigma(dp[k<i][l<j],a[i][j]=a[k][l]) 考虑对于每一种颜色都开一颗区间线段树,但是空间不够. 所以我们可以动 ...
- SPOJ LCS2 Longest Common Substring II ——后缀自动机
后缀自动机裸题 #include <cstdio> #include <cstring> #include <iostream> #include <algo ...
- 手把手教你搭建DHCP服务器
目录 DHCP实现原理 DHCP定义 DHCP分配方式 DHCP工作过程 初次登录 重新登录 更新租约 搭建DHCP服务器 实验目的 实验环境 实验步骤 实验结果 DHCP实现原理 DHCP定义 DH ...