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 ...
随机推荐
- 【01】markdown特殊说明
[01]说明 Markdown 的目标是实现「易读易写」. 可读性,无论如何,都是最重要的.一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令 ...
- java编程思想阅读记录
第五章:初始化与清理 1.构造器确保初始化 构造器采用与类名相同的方法. 创建对象时,将会为对象分配存储空间,并调用相应的构造器.这就确保了在你能操作对象之前,它就已经恰当的被初始化了. 垃圾回收器负 ...
- [android开发篇]activity组件篇
https://developer.android.com/guide/components/activities.html Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打 ...
- [android 应用框架api篇] bluetooth
bluetooth接口 android.bluetooth.jar 官网网址: 接口类: https://developer.android.com/reference/android/bluetoo ...
- SPOJ - ADALIST,双端队列入门模板!
ADALIST - Ada and List 这道题时限6.5s,激动人心啊,好多人STL一顿乱写AC,哈哈,如果熟悉双端队列的话这道题其实是很水的. 题意:n个数的数列,然后接下来Q次操作,每次可以 ...
- BZOJ 2882 工艺 ——后缀自动机 最小表示法
先说后缀自动机的做法. 直接把S串复制一遍成SS,然后建立后缀自动机,go边相当于在当前字符的后面插入,而son边可以看作在字符串前面加一个字符. 所以贪心的走字典序最小的边即可,而且根据后缀自动机的 ...
- 常州模拟赛d2t1 小X的质数
题目背景 小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的 情感.小 X 认为,质数是一切自然数起源的地方. 题目描述 在小 X 的认知里,质数是除了本身和 1 以外,没有其他因 ...
- 转载:sql2005 Microsoft SQL Server Management Studio Express的安装问题
转载地址:http://blog.csdn.net/rjc20098022/article/details/26958105 在这个网址http://www.microsoft.com/zh-cn/d ...
- C# 用this修饰符为原始类型扩展方法
特点:1.静态类 2.静态方法 3.第一个参数前加this 例如:public static List<T> ToList<T>(this string Json),就是为th ...
- FireDac心得
usesFireDAC.Phys.MySQL, FireDAC.Stan.Def, FireDAC.DApt, FireDAC.Comp.Client, FireDAC.Comp.UI, FireDA ...