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

 更新时间:2011年07月20日 22:57:14   作者:  
很久没有遇上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设计模式之状态模式定义与用法详解

    PHP设计模式之状态模式定义与用法详解

    这篇文章主要介绍了PHP设计模式之状态模式定义与用法,结合实例形式分析了php状态模式的概念、原理、定义、使用方法及相关注意事项,需要的朋友可以参考下
    2018-04-04
  • 详解PHP Swoole长连接常见问题

    详解PHP Swoole长连接常见问题

    长连接就是指在基于tcp的通讯中,一直保持连接,不管当前是否发送或者接收数据。本文将详细介绍PHP Swoole长连接的常见问题。
    2021-05-05
  • PHP函数strip_tags的一个bug浅析

    PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。
    2014-05-05
  • Windows下编译PHP5.4和xdebug全记录

    Windows下编译PHP5.4和xdebug全记录

    这篇文章主要介绍了Windows下编译PHP5.4和xdebug全记录,本文讲解了编译环境以及相关软件包、编译过程、编译中可能出现的错误问题处理等内容,需要的朋友可以参考下
    2015-04-04
  • PHP实现从远程下载文件的方法

    PHP实现从远程下载文件的方法

    这篇文章主要介绍了PHP实现从远程下载文件的方法,涉及php操作文件的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • 如何从防护角度看Thinkphp历史漏洞

    如何从防护角度看Thinkphp历史漏洞

    19年初,网上公开了2个Thinkphp5的RCE漏洞,漏洞非常好用,导致有很多攻击者用扫描器进行全网扫描。我们通过ips设备持续观察到大量利用这几个漏洞进行批量getshell的攻击流量,本文主要从流量角度简要分析和利用thinkphp进行攻击的全网扫描和getshell流量痕迹。
    2021-05-05
  • php 使用file_get_contents读取大文件的方法

    php 使用file_get_contents读取大文件的方法

    本文介绍了在php中使用file_get_contents函数读取大文件的方法,并附上了示例以及使用小技巧,非常的实用,这里推荐给大家
    2014-11-11
  • PHP 向右侧拉菜单实现代码,测试使用中

    PHP 向右侧拉菜单实现代码,测试使用中

    PHP 向右侧拉菜单实现代码,测试使用中,需要的朋友可以测试下。
    2009-11-11
  • golang、python、php、c++、c、java、Nodejs性能对比

    golang、python、php、c++、c、java、Nodejs性能对比

    这篇文章主要介绍了golang、python、php、c++、c、java、Nodejs性能对比的相关资料,需要的朋友可以参考下
    2017-03-03
  • PHP结合Redis+MySQL实现冷热数据交换应用案例详解

    PHP结合Redis+MySQL实现冷热数据交换应用案例详解

    这篇文章主要介绍了PHP结合Redis+MySQL实现冷热数据交换应用案例,结合具体实例形式详细分析了Redis+MySQL冷热数据交换原理、实现方法及相关操作技巧,需要的朋友可以参考下
    2019-07-07

最新评论