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


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版(4)
Oct 09 PHP
在yii中新增一个用户验证的方法详解
Jun 20 PHP
php实现批量压缩图片文件大小的脚本
Jul 04 PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
Mar 17 PHP
php实现的debug log日志操作类实例
Jul 12 PHP
PHP不使用内置函数实现字符串转整型的方法示例
Jul 03 PHP
PHP基于Closure类创建匿名函数的方法详解
Aug 17 PHP
Yii框架日志记录Logging操作示例
Jul 12 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中利用XML技术构造远程服务(上)
2006/10/09 PHP
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
PHP编程风格规范分享
2014/01/15 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
深入理解PHP JSON数组与对象
2016/07/19 PHP
php array_udiff_assoc 计算两个数组的差集实例
2016/11/12 PHP
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
Python检测网站链接是否已存在
2016/04/07 Python
python executemany的使用及注意事项
2017/03/13 Python
python re模块findall()函数实例解析
2018/01/19 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
老公给老婆的道歉信
2014/01/10 职场文书
优秀经理事迹材料
2014/02/01 职场文书
小松树教学反思
2014/02/11 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
青年教师听课心得体会
2016/01/15 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android