模板引擎正则表达式调试小技巧


Posted in PHP onJuly 20, 2011

基于正则表达式替换的模板引擎很容易遇上正则表达式最大回溯/递归的限制。
惰性匹配并不可怕,正常情况下模板并不会不够用,往往不会超出限制,discuz的模板引擎就大量使用了。但是因此而不去注意、不去学习,则容易书写错误并遇上问题。
当preg_*返回的是null的时候则要注意了,判断函数是is_null.
出错并不可怕,但是最好把错误都完整的输出,这样调试就很容易了。
除了输出出错原因,还要输出匹配的文本和使用的正则,这样就很容易调试了。
PHP代码

<?php 
if (is_null($tmp)){ 
$error_code = preg_last_error(); 
switch($error_code){ 
case PREG_NO_ERROR : 
echo 'PREG_NO_ERROR'; 
break; 
case PREG_INTERNAL_ERROR: 
echo 'PREG_INTERNAL_ERROR'; 
break; 
case PREG_BACKTRACK_LIMIT_ERROR: 
echo 'PREG_BACKTRACK_LIMIT_ERROR'; 
break; 
case PREG_RECURSION_LIMIT_ERROR: 
echo 'PREG_RECURSION_LIMIT_ERROR'; 
break; 
case PREG_BAD_UTF8_ERROR: 
echo 'PREG_BAD_UTF8_ERROR'; 
break; 
case PREG_BAD_UTF8_OFFSET_ERROR: 
echo 'PREG_BAD_UTF8_OFFSET_ERROR'; 
break; 
default: 
echo 'UNKNOW ERROR'; 
} 
exit; 
}

参考资料
1、2010, Laruence 《深悉正则(pcre)最大回溯/递归限制》
2、2011, PHP中文手册 preg_last_error

PHP 相关文章推荐
小偷PHP+Html+缓存
Dec 20 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
php建立Ftp连接的方法
Mar 07 PHP
php字符串分割函数用法实例
Mar 17 PHP
php实现的RSS生成类实例
Apr 23 PHP
浅谈php+phpStorm+xdebug配置方法
Sep 17 PHP
8个必备的PHP功能开发
Oct 02 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 PHP
PHP的Yii框架中View视图的使用进阶
Mar 29 PHP
php文件上传的两种实现方法
Apr 04 PHP
PHP实现数据四舍五入的方法小结【4种方法】
Mar 27 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 PHP
php中批量替换文件名的实现代码
Jul 20 #PHP
关于php连接mssql:pdo odbc sql server
Jul 20 #PHP
PHP mcrypt可逆加密算法分析
Jul 19 #PHP
PHP中date()日期函数有关参数整理
Jul 19 #PHP
php URL验证正则表达式
Jul 19 #PHP
PHP中static关键字原理的学习研究分析
Jul 18 #PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
Jul 18 #PHP
You might like
Discuz! Passport 通行证整合
2008/03/27 PHP
PHP实时显示输出
2008/10/02 PHP
php中批量修改文件后缀名的函数代码
2011/10/23 PHP
smarty简单应用实例
2015/11/03 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
Three.js基础学习教程
2017/11/16 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
jQuery实现轮播图源码
2019/10/23 jQuery
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
高中同学聚会邀请函
2014/01/11 职场文书
酒吧创业计划书
2014/01/18 职场文书
中学家长会邀请函
2014/02/03 职场文书
讲文明树新风公益广告宣传方案
2014/02/25 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
自主招生英文自荐信
2015/03/25 职场文书
公司保密管理制度
2015/08/04 职场文书