php新版本废弃 preg_replace /e 修饰符
生活随笔
收集整理的這篇文章主要介紹了
php新版本废弃 preg_replace /e 修饰符
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
php新版本廢棄 preg_replace /e 修飾符
分類: PHP 2014-12-16 13:00 3531人閱讀 評論(3) 收藏 舉報
php正則
最近服務器php版本升級到了 5.6 發(fā)現(xiàn)出了很多警告
[php] view plaincopy在CODE上查看代碼片派生到我的代碼片
preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead 一開始沒注意,后來發(fā)現(xiàn) 很多這樣的警告,于是網上查了下 發(fā)現(xiàn) php5.5版本以上 就廢棄了 preg_replace 函數(shù)中 /e 這個修飾符 /e 這個修飾符的意思 就是讓 正則替換的 時候 替換規(guī)則 支持 php 代碼 那么 應該怎么辦呢
其實 只要 把 preg_replace 里面 有 /e 修飾符的代碼 修改成 preg_replace _callback 然后重新寫下就好了 例子 最簡單的 寫法
[php] view plaincopy在CODE上查看代碼片派生到我的代碼片
preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str)
修改成
[php] view plaincopy在CODE上查看代碼片派生到我的代碼片
preg_replace("/([A-Z])/",'gwyy', $str);
function gwyy($match) { return '_'.strtolower($match[1]);
} 第二個參數(shù)是個 函數(shù)名 然后在外部寫一個函數(shù) 但是 我們每次定義一個函數(shù) 感覺很麻煩 所以我們可以用匿名函數(shù)比如說 [php] view plaincopy在CODE上查看代碼片派生到我的代碼片
preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str) 修改成
[php] view plaincopy在CODE上查看代碼片派生到我的代碼片
preg_replace_callback('/([A-Z])/', function ($matches) { return '_' . strtolower($matches[0]); }, $str)
即可這里特別警告 修改后 /([A-Z])/e 最后一個 e 一定要去掉 不然就出錯了 如果在類里面 還能這么寫
[php] view plaincopy在CODE上查看代碼片派生到我的代碼片
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(); 第二個參數(shù)不是一個函數(shù) 而變成了一個數(shù)組 表示 調用 $this 類 里面的 gwyy 方法 執(zhí)行 gwyy會自動接受到 一個 $match 參數(shù)表 下面再看一個稍微復雜點的例子
[php] view plaincopy在CODE上查看代碼片派生到我的代碼片
$patterns = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/eis';
$replacement = "\$this->parseXmlTag('$tagLib','$tag','$1','')";
$content = preg_replace($patterns, $replacement,$content); 這個替換 使用了 類里面的自定義方法 如果 你再 用匿名函數(shù)直接套的話 會提示 錯誤 因為 匿名函數(shù)上下文里面 并沒有 該方法和 該變量 所以 要用 use() 來引入 同時 注意 一定要 把 正則里面 e 去掉
[php] view plaincopy在CODE上查看代碼片派生到我的代碼片
$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; 好了 今天先記錄到這里吧 。小煙原創(chuàng),轉載請注明出處!
?
總結
以上是生活随笔為你收集整理的php新版本废弃 preg_replace /e 修饰符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 变更管理、信息系统安全管理、项目风险管理
- 下一篇: MyEclipse中安装反编译插件