最近服务器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; 好了 今天先记录到这里吧 。