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


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入门速成教程
Mar 19 PHP
php feof用来识别文件末尾字符的方法
Aug 01 PHP
php 连接mysql连接被重置的解决方法
Feb 15 PHP
如何在symfony中导出为CSV文件中的数据
Oct 06 PHP
WordPress网站性能优化指南
Nov 18 PHP
php实现贪吃蛇小游戏
Jul 26 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
Jul 04 PHP
php 可变函数使用小结
Jun 12 PHP
Laravel框架实现多个视图共享相同数据的方法详解
Jul 09 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 PHP
laravel 解决路由除了根目录其他都404的问题
Oct 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字符串函数的总结分析
2013/06/05 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
python使用电子邮件模块smtplib的方法
2016/08/28 Python
python使用mysql数据库示例代码
2017/05/21 Python
浅谈python中的占位符
2017/11/09 Python
python 三元运算符使用解析
2019/09/16 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
《兰亭集序》教学反思
2014/02/11 职场文书
爱情寄语大全
2014/04/09 职场文书
会议开幕词
2015/01/28 职场文书
大国崛起英国观后感
2015/06/02 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python