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


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 全局变量范围分析
Aug 07 PHP
php实现首页链接查询 友情链接检查的代码
Jan 05 PHP
PHP数据过滤的方法
Oct 30 PHP
PHP读取RSS(Feed)简单实例
Jun 12 PHP
Laravel框架中扩展函数、扩展自定义类的方法
Sep 04 PHP
php类的定义与继承用法实例
Jul 07 PHP
PHP实现简单搜歌的方法
Jul 28 PHP
php导出生成word的方法
Dec 25 PHP
教你php如何实现验证码
Jan 20 PHP
CodeIgniter控制器之业务逻辑实例分析
Jan 20 PHP
PHP全局变量与超级全局变量区别分析
Apr 01 PHP
PHP数据库操作四:mongodb用法分析
Aug 16 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部分常见问题总结
2006/10/09 PHP
针对初学PHP者的疑难问答(2)
2006/10/09 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
php 生成短网址原理及代码
2014/01/23 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
python函数参数*args**kwargs用法实例
2013/12/04 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
python定时任务 sched模块用法实例
2019/11/04 Python
Django框架模板用法入门教程
2019/11/04 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
三万活动总结
2014/04/28 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
简爱电影观后感
2015/06/10 职场文书
退休教师追悼词
2015/06/23 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
为什么node.js不适合大型项目
2021/04/28 Javascript
深入理解python协程
2021/06/15 Python
四十九个javascript小知识实用技巧
2021/11/20 Javascript
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle