昨天,同事在处理一个正则采集程序,发现了一个怪现象:在本地正则规则随便写都可以匹配到,可是上传到服务器后发现正则怎么写都匹配不到。自己调整了半天没有效果,放弃?那就…………,不甘心……,吃过晚饭后,打开电脑随便乱狂博客,还是google了一下,有关正则的规则,找来找去都在谈怎么写正则表达式等。最后静下心来分析了一下。
我和同事的电脑装的都是wamp,php版本都是5.3.x,服务器php版本是5.2.x,难道是这个问题,抱着怀疑的心情,打开了手册文本处理-pcre函数-preg_match_all,好家伙原来它上面有一个函数preg_last_error,打开看了看,那就用他试下我的代码,结果返回错误是 PREG_BACKTRACK_LIMIT_ERROR ,原来是这个环境变量问题,于是在我代码的开头加入ini_set("pcre.backtrack_limit",1000000);结果正常抓取。回头再看了下手册,发现下面的介绍:
最后又上网查了一些资料,其中有一个博主写的挺细的:下面转一些相关内容,解释一下:
在PHP的pcre扩展中, 提供了俩个设置项.
1 pcre.backtrack_limit //最大回溯数
2 pcre.recursion_limit //最大嵌套数