preg函数的最大字符限制?

时间:2010-05-25 06:11:24

标签: php pattern-matching limit preg-match

在我的网站上,我使用输出缓冲来获取所有输出,然后通过流程函数运行它,然后将其发送到浏览器(我不会替换任何东西,只需将其分解为更易于管理的部分)。在这种特殊情况下,有大量的输出,因为它列出了数据库中每个国家(大约240个国家)的标签。问题是,在我看来,我的preg_match函数似乎被跳过了,它绝对没有任何内容并且没有返回匹配项。但是,如果我删除部分标签(没有特定部分,只是随机部分以减少字符),那么preg_match函数再次起作用。我从标签中删除的内容似乎并不重要,只要我删除这么多字符就好了。对preg函数可以处理的内容是否存在某种限制,或者如果有太多数据需要扫描,它会超时吗?

编辑:这是运行它的功能。

public function boom($data) {
    $number = preg_match_all("/(<!-- ([\w]+):start -->)\n?(.*?)\n?(<!-- \\2:stop -->)/s", $data, $matches, PREG_SET_ORDER);
    if ($number == 0) $data = array("content" => $data);
    else unset($data);
    foreach ($matches as $item):
        //$item[3] = preg_replace("/\n/", "", $item[3], 1);
        if (preg_match("/<!-- breaker -->/s", $item[3])) $data[$item[2]] = explode("<!-- breaker -->", $item[3]);
        else $data[$item[2]] = $item[3];
    endforeach;
    //die(var_dump($data));
    return $data;
}

这是发送到页面的未处理输出。我已经确定在开头的preg_match_all在变量中返回0个匹配项,因此该函数只是将收到的整个字符串抛出到$data['content']并跳过其他所有内容。

http://pastebin.com/iGfM6gxx

我尝试将标签放在新线上,将它们折叠在一起,似乎没什么用。但如上所述,如果我删除它的随机部分,那么它会很好。该功能与正常长度的每个其他页面完美配合。

1 个答案:

答案 0 :(得分:0)

很难说没有看到你的正则表达式和数据,但试着改变pcre.backtrack_limit / pcre.recursion_limit(http://www.php.net/manual/en/pcre.configuration.php