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


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 相关文章推荐
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
PHP调用Twitter的RSS的实现代码
Mar 10 PHP
php skymvc 一款轻量、简单的php
Jun 28 PHP
php摘要生成函数(无乱码)
Feb 04 PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 PHP
php用正则表达式匹配URL的简单方法
Nov 12 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
php使用curl实现简单模拟提交表单功能
May 15 PHP
CI框架网页缓存简单用法分析
Dec 26 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 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备份/还原MySQL数据库的代码
2011/01/06 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
JavaScript 调试器简介
2009/02/21 Javascript
javascript 树控件 比较好用
2009/06/11 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
JS画线(实例代码)
2013/11/20 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
微信小程序实现蓝牙打印
2019/09/23 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
Nuxt的路由动画效果案例
2020/11/06 Javascript
python实现dict版图遍历示例
2014/02/19 Python
python实现简单ftp客户端的方法
2015/06/28 Python
基于Python os模块常用命令介绍
2017/11/03 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
欧洲最大的预定车位市场:JustPark
2020/01/06 全球购物
教学质量评估实施方案
2014/03/17 职场文书
单位委托书怎么写
2014/09/21 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP