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


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设计模式 注册表模式(多个类的注册)
Feb 05 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 PHP
php ajax实现文件上传进度条
Mar 29 PHP
PHP在线调试执行的实现方法(附demo源码)
Apr 28 PHP
php数组冒泡排序算法实例
May 06 PHP
PHP定时任务获取微信access_token的方法
Oct 10 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
May 20 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 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提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
js活用事件触发对象动作
2008/08/10 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
js实现简单的秒表
2020/01/16 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
javascript代码实现简易计算器
2021/01/25 Javascript
在Django中创建第一个静态视图
2015/07/15 Python
Python自动扫雷实现方法
2015/07/25 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
使用Python读取大文件的方法
2018/02/11 Python
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
python opencv读mp4视频的实例
2018/12/07 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
python中如何使用insert函数
2020/01/09 Python
Python随机数函数代码实例解析
2020/02/09 Python
Python学习笔记之装饰器
2020/08/06 Python
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
Java语言程序设计测试题判断题部分
2013/01/06 面试题
《云雀的心愿》教学反思
2014/02/25 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
委托公证书范本
2014/04/03 职场文书
离婚协议书范文2016
2016/03/18 职场文书
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python
python not运算符的实例用法
2021/06/30 Python