電話

    0411-39943997

仟億科技
客服中心
  • 電話
  • 電話咨詢:0411-39943997
  • 手機
  • 手機咨詢:15840979770
    手機咨詢:13889672791
網絡營銷 >更多
您現在的位置:首頁 > 新聞中心 > 常見問題

網頁模板引擎正則表達式調試的技巧

作者:billionnet 發布于:2012/3/28 17:59:33 點擊量:

很久沒有遇上PHP難題了,這次正則問題占了一點時間,還是老問題最大回溯、遞歸限制問題。學習透之后其實并不難修改調試有這類問題的正則。主要是以下幾點。

基于正則表達式替換的模板引擎很容易遇上正則表達式最大回溯/遞歸的限制。


惰性匹配并不可怕,正常情況下模板并不會不夠用,往往不會超出限制,discuz的模板引擎就大量使用了。但是因此而不去注意、不去學習,則容易書寫錯誤并遇上問題。


當preg_*返回的是null的時候則要注意了,判斷函數是is_null.


出錯并不可怕,但是最好把錯誤都完整的輸出,這樣調試就很容易了。


除了輸出出錯原因,還要輸出匹配的文本和使用的正則,這樣就很容易調試了。


PHP代碼











  1. if (is_null($tmp)){   

  2.     $error_code = preg_last_error();   

  3.     switch($error_code){   

  4.         case PREG_NO_ERROR :   

  5.             echo ""PREG_NO_ERROR"";   

  6.             break;   

  7.         case PREG_INTERNAL_ERROR:   

  8.             echo ""PREG_INTERNAL_ERROR"";   

  9.             break;   

  10.         case PREG_BACKTRACK_LIMIT_ERROR:   

  11.             echo ""PREG_BACKTRACK_LIMIT_ERROR"";   

  12.             break;   

  13.         case PREG_RECURSION_LIMIT_ERROR:   

  14.             echo ""PREG_RECURSION_LIMIT_ERROR"";   

  15.             break;   

  16.         case PREG_BAD_UTF8_ERROR:   

  17.             echo ""PREG_BAD_UTF8_ERROR"";   

  18.             break;   

  19.         case PREG_BAD_UTF8_OFFSET_ERROR:   

  20.             echo ""PREG_BAD_UTF8_OFFSET_ERROR"";   

  21.             break;   

  22.         default:   

  23.             echo ""UNKNOW ERROR"";   

  24.     }   

  25.     exit;   

  26. }  


參考資料


1、2010, Laruence 《深悉正則(pcre)最大回溯/遞歸限制》


2、2011, PHP中文手冊 preg_last_error


 



分享到:


Copyright@ 2011-2016 版權所有:大連千億科技有限公司 遼ICP備11013762-3號   google網站地圖   百度網站地圖   網站地圖

公司地址:大連市沙河口區中山路692號辰熙星海國際2317 客服電話:0411-39943997 QQ:2088827823 37482752

法律聲明:未經許可,任何模仿本站模板、轉載本站內容等行為者,本站保留追究其法律責任的權利! 隱私權政策聲明

www精品一区二区三区四区