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


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 时间计算问题小结
Jan 04 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 PHP
图文介绍PHP添加Redis模块及连接
Jul 28 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 PHP
twig里使用js变量的方法
Feb 05 PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
Oct 13 PHP
php从数据库读取数据,并以json格式返回数据的方法
Aug 21 PHP
php策略模式简单示例分析【区别于工厂模式】
Sep 25 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
php实现mysql封装类示例
2014/05/07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
Python列表(list)常用操作方法小结
2015/02/02 Python
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
Python_LDA实现方法详解
2017/10/25 Python
python opencv实现证件照换底功能
2019/08/19 Python
tensorflow 实现数据类型转换
2020/02/17 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
机关财务管理制度
2014/01/17 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
教师群众路线心得体会
2014/11/04 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
表扬信格式模板
2015/05/05 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫
python数字图像处理实现图像的形变与缩放
2022/06/28 Python