熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

模板引擎正則表達式調試小技巧

2013-11-15 12:37:11  來源: PHP編程 

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

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

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

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

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

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

  PHP代碼

  1. <?php   
  2. if (is_null($tmp)){   
  3.     $error_code = preg_last_error();   
  4.     switch($error_code){   
  5.         case PREG_NO_ERROR :   
  6.             echo PREG_NO_ERROR;   
  7.             break;   
  8.         case PREG_INTERNAL_ERROR:   
  9.             echo PREG_INTERNAL_ERROR;   
  10.             break;   
  11.         case PREG_BACKTRACK_LIMIT_ERROR:   
  12.             echo PREG_BACKTRACK_LIMIT_ERROR;   
  13.             break;   
  14.         case PREG_RECURSION_LIMIT_ERROR:   
  15.             echo PREG_RECURSION_LIMIT_ERROR;   
  16.             break;   
  17.         case PREG_BAD_UTF_ERROR:   
  18.             echo PREG_BAD_UTF_ERROR;   
  19.             break;   
  20.         case PREG_BAD_UTF_OFFSET_ERROR:   
  21.             echo PREG_BAD_UTF_OFFSET_ERROR;   
  22.             break;   
  23.         default:   
  24.             echo UNKNOW ERROR;   
  25.     }   
  26.     exit;   
  27. }  

  參考資料

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

   PHP中文手冊 preg_last_error


From:http://tw.wingwit.com/Article/program/PHP/201311/21289.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.