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

yipeiwu_com7年前PHP代码库
基于正则表达式替换的模板引擎很容易遇上正则表达式最大回溯/递归的限制。
惰性匹配并不可怕,正常情况下模板并不会不够用,往往不会超出限制,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解析RSS的方法

本文实例讲述了PHP解析RSS的方法。分享给大家供大家参考。具体如下: 1. php代码如下:     复制代码 代码如下:<?p...

thinkPHP5实现的查询数据库并返回json数据实例

本文实例讲述了thinkPHP5实现的查询数据库并返回json数据。分享给大家供大家参考,具体如下: TP5 实现查询数据库返回json数据(返回json数据函数实例) 返回结果: 复制...

利用PHP自动生成印有用户信息的名片

利用PHP自动生成印有用户信息的名片

前言 无论是自己要在精心P过的自拍上添加个性文字,或者是摄影爱好者要在拍摄的作品里添加水印,亦或是在网页或者移动应用中实时生成文字和图片的组合,我们都需要找到一个合适且靠谱的方法来将图片...

探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法

【造成原因】:Because PHP's integer type is signed, and many IP addresses will result in negative in...

php+xml结合Ajax实现点赞功能完整实例

本文实例讲述了php+xml结合Ajax实现点赞功能的方法。分享给大家供大家参考。具体如下: 使用xml、php和Ajax实现点赞功能,不需要链接数据库,使用php来修改xml的内容,使...