大连仟亿科技
客服中心
  • 电话
  • 电话咨询: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-2017 版权所有:大连仟亿科技有限公司 辽ICP备11013762-1号   google网站地图   百度网站地图   网站地图

公司地址:大连市沙河口区中山路692号辰熙星海国际2215 客服电话:0411-39943997 QQ:2088827823 42286563

法律声明:未经许可,任何模仿本站模板、转载本站内容等行为者,本站保留追究其法律责任的权利! 隐私权政策声明