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


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入门学习笔记之一
Oct 12 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
Php Ctemplate引擎开发相关内容
Mar 03 PHP
php的POSIX 函数以及进程测试的深入分析
Jun 03 PHP
如何解决CI框架的Disallowed Key Characters错误提示
Jul 05 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
学习php设计模式 php实现观察者模式(Observer)
Dec 09 PHP
php注册登录系统简化版
Dec 28 PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 PHP
form自动提交实例讲解
Jul 10 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
Aug 04 PHP
Yii 框架使用Forms操作详解
May 18 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
用PHP控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
mysql数据库差异比较的PHP代码
2012/02/05 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
PHP7 新增功能
2021/03/09 PHP
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
JS window对象简单操作完整示例
2020/01/14 Javascript
JS实现放烟花效果
2020/03/10 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
Python登录并获取CSDN博客所有文章列表代码实例
2017/12/28 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
工程预算与管理应届生求职信
2013/10/06 职场文书
环境科学专业个人求职的自我评价
2013/11/28 职场文书
人事行政主管岗位职责
2013/12/22 职场文书
小学美术教学反思
2014/02/01 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
离婚起诉书范文2015
2015/05/19 职场文书