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


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 相关文章推荐
无限级别菜单的实现
Oct 09 PHP
攻克CakePHP系列一 连接MySQL数据库
Oct 22 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
Jun 21 PHP
收藏的PHP常用函数 推荐收藏保存
Feb 21 PHP
php中用加号与用array_merge合并数组的区别深入分析
Jun 03 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
Jun 03 PHP
给ECShop添加最新评论
Jan 07 PHP
php使用escapeshellarg时中文被过滤的解决方法
Jul 10 PHP
php实现的AES加密类定义与用法示例
Jan 29 PHP
PHP实现微信对账单处理
Oct 01 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
Oct 25 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 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
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
vue项目中使用vue-layer弹框插件的方法
2020/03/11 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
冰淇淋店创业计划书范文
2013/12/27 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
社区工作者演讲稿
2014/05/23 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
导游词开场白
2015/01/31 职场文书
离职信范本
2015/06/23 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
人民币使用说明书
2019/04/17 职场文书
如何Python使用re模块实现okenizer
2022/04/30 Python