您好,欢迎访问一九零五行业门户网

php新版本废弃 preg_replace /e 修饰符

最近服务器php版本升级到了 5.6  发现出了很多警告
preg_replace(): the /e modifier is deprecated, use preg_replace_callback instead
一开始没注意,后来发现 很多这样的警告,于是网上查了下 发现 php5.5版本以上 就废弃了  preg_replace   函数中 /e 这个修饰符  /e 这个修饰符的意思 就是让 正则替换的 时候 替换规则 支持 php 代码
那么 应该怎么办呢 
其实 只要 把 preg_replace 里面 有 /e 修饰符的代码 修改成  preg_replace _callback  然后重新写下就好了
例子  
比如说
preg_replace(/([a-z])/e, '_' . strtolower('\\1'), $str)
修改成
preg_replace_callback('/([a-z])/', function ($matches) { return '_' . strtolower($matches[0]); }, $str)
即可
这里特别警告 修改后 /([a-z])/e  最后一个  e   一定要去掉 不然就出错了
下面再看一个稍微复杂点的例子
$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);
这里 用 $thit  代替 $this;  好了 今天先记录到这里吧 。
其它类似信息

推荐信息