• 技术文章 >后端开发 >php教程

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

    2016-05-17 09:16:50原创495
    基于正则表达式替换的模板引擎很容易遇上正则表达式最大回溯/递归的限制。
    惰性匹配并不可怕,正常情况下模板并不会不够用,往往不会超出限制,discuz的模板引擎就大量使用了。但是因此而不去注意、不去学习,则容易书写错误并遇上问题。
    当preg_*返回的是null的时候则要注意了,判断函数是is_null.
    出错并不可怕,但是最好把错误都完整的输出,这样调试就很容易了。
    除了输出出错原因,还要输出匹配的文本和使用的正则,这样就很容易调试了。
    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

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:简单的php写入数据库类代码分享_php技巧 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 聊聊php怎么让Swoole/Pool进程池实现Redis持久连接• 一文解析PHP元转分的错误示范(附代码实例)• PHP+Socket系列之实现websocket聊天室• PHP+Socket系列之实现客户端与服务端数据传输• 聊聊PHP escapeshellarg函数使用的中文问题
    1/1

    PHP中文网