代码之家  ›  专栏  ›  技术社区  ›  animuson

preg函数的最大字符限制?

  •  0
  • animuson  · 技术社区  · 16 年前

    在我的站点上,我使用输出缓冲来获取所有的输出,然后在将其发送到浏览器之前通过一个进程函数运行它(我不替换任何内容,只是将其分解为更易于管理的部分)。在这个特殊的例子中,有大量的输出,因为它列出了数据库中每个国家(大约240个国家)的标签。问题是,我的preg\u match函数似乎被跳过了,它完全不做任何事情,也不返回任何匹配。但是,如果我删除了部分标签(没有特定的部分,只是随机的减少字符),那么preg\u 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;
    }
    

    这是发送到页面的未处理的输出。我已经确定,在变量中返回0个匹配项的是开头的preg\u match\u all,因此函数只是将它接收到的整个字符串抛出 $data['content']

    http://pastebin.com/iGfM6gxx

    1 回复  |  直到 16 年前
        1
  •  0
  •   ts.    16 年前

    很难说没有看到你的正则表达式和数据,但是试着改变pcre.backtrack\u limit/pcre.recursion\u limit( http://www.php.net/manual/en/pcre.configuration.php )