preg_match和长字符串

时间:2010-06-11 08:32:00

标签: php regex preg-match

这是我试图用来在文本文件中查找特定文本的preg_match。

if (preg_match($regexp,$textFile,$result) > 0) {
    echo "Found ".$result[0];
} else {
    echo "Not found";
}

但是,结果始终为Found,仅此而已。结果数组为空。现在我读到preg_match无法使用长字符串。

我的文本文件大约是300KB,所以我想是300000个字符。

我100%确定搜索到的字符串在文本文件中,并且preg_match函数返回值大于0的事实意味着它找到了它,但它没有以某种方式将它放入结果数组中。

所以我的问题是,我如何让它发挥作用?

regexp将是/[specific text]\{(\d*)\}/所以,当然我希望能够得到括号中的数字。

2 个答案:

答案 0 :(得分:8)

我很高兴我发现了这个问题。从PHP 5.2开始,他们对可以使用PCRE功能的文本大小进行了限制,默认为100k。那不是那么糟糕。不好的一面是默默地失败如果大于那个。

解决方案?上限。初始化参数为pcre.backtrack_limit

答案 1 :(得分:0)

否,请勿提高pcre的限制。不要不了解就做事。这是php pcre的常见错误

阅读@ridgerunner的精彩回答: https://stackoverflow.com/a/7627962/1077650

  

由于堆栈溢出,此类正则表达式将反复(无提示)使Apache / PHP崩溃,并出现未处理的分段错误!

     

PHP错误1:PHP设置:pcre.recursion_limit太大。

     

PHP错误2:preg_match()不会在错误时返回FALSE。