这是我试图用来在文本文件中查找特定文本的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*)\}/
所以,当然我希望能够得到括号中的数字。
答案 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。