快速业务通道

PHP教程:基于正则表达式替换的模板引擎

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-16

很久没有遇上PHP难题了,这次正则问题占了一点时间,还是老问题最大回溯、递归限制问题。学习透之后其实并不难修改调试有这类问题的正则。主要是以下几点。

基于正则表达式替换的模板引擎很容易遇上正则表达式最大回溯/递归的限制。

惰性匹配并不可怕,正常情况下模板并不会不够用,往往不会超出限制,discuz的模板引擎就大量使用了。但是因此而不去注意、不去学习,则容易书写错误并遇上问题。

当preg_*返回的是null的时候则要注意了,判断函数是is_null.

出错并不可怕,但是最好把错误都完整的输出,这样调试就很容易了。

除了输出出错原因,还要输出匹配的文本和使用的正则,这样就很容易调试了。

PHP代码

  1. <?php   
  2. if (is_null($tmp)){   
  3.     $error_code = preg_last_error();   
  4.     switch($error_code){   
  5.         case PREG_NO_ERROR :   
  6.             echo ''PREG_NO_ERROR'';   
  7.             break;   
  8.         case PREG_INTERNAL_ERROR:   
  9.             echo ''PREG_INTERNAL_ERROR'';   
  10.             break;   
  11.         case PREG_BACKTRACK_LIMIT_ERROR:   
  12.             echo ''PREG_BACKTRACK_LIMIT_ERROR'';   
  13.             break;   
  14.         case PREG_RECURSION_LIMIT_ERROR:   
  15.             echo ''PREG_RECURSION_LIMIT_ERROR'';   
  16.             break;   
  17.         case PREG_BAD_UTF8_ERROR:   
  18.             echo ''PREG_BAD_UTF8_ERROR'';   
  19.             break;   
  20.         case PREG_BAD_UTF8_OFFSET_ERROR:   
  21.             echo ''PREG_BAD_UTF8_OFFSET_ERROR'';   
  22.             break;   
  23.         default:   
  24.             echo ''UNKNOW ERROR'';   
  25.     }   
  26.     exit;   
  27. }  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号