网站地图

php正则内容太大获取不到问题

创建时间:2014-02-08 21:18:03最后修改:2014-02-08 21:18:03

使用PHP正则采集文章内容,遇到一个问题,在本机测试的时候可以匹配到内容,但同样的代码在服务器端匹配不到文章内容。

使用的是PHP的preg_match函数,正则用的非贪婪模式。

经过一番折腾,最后在使用正则前加了一句下面的代码,问题解决了:

ini_set('pcre.backtrack_limit',100000000);
pcre.backtrack_limit是pcre的最大回溯数限制,默认值是100000。

与这个参数类似的还有一个名为pcre.recursion_limit的参数:

pcre.backtrack_limit是pcre的最大嵌套数限制,默认值是100000。

什么是回溯?

正则在使用非贪婪模式时,匹配原理简单来说是,在可配也可不配的情况下,优先不匹配,记录备选状态,并将匹配控制交给正则表达式的下一个匹配字符,当之后的匹配失败的时候,再次进行匹配。这样就是一次回溯。