preg_match and long strings

99封情书 提交于 2020-01-04 01:08:39

问题


This is the preg_match i am trying to use to find specific text in text file.

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

However, the result is always Found and nothing more. The result array is empty. Now i read that preg_match can't work with long strings.

My text file is about 300KB so thats 300000 characters i guess.

I am 100% sure that the searched string is in the text file, and the fact that preg_match function returns value above 0 means it found it, but it didn't place it into the result array somehow.

So my question would be, how do i make it work?

regexp would be /[specific text]\{(\d*)\}/ so, of course i want to be able to get the number in the parentheses.


回答1:


You'll be glad I found this question. As of PHP 5.2, they introduced a limit on the size of text that the PCRE functions can be used on, which defaults to 100k. That's not so bad. The bad part is that it silently fails if greater than that.

The solution? Up the limit. The initialization parameter is pcre.backtrack_limit.




回答2:


No, don't up the pcre limit. Don't do things without understand them. This is a common bug with php pcre

Read this awesome answer by @ridgerunner : https://stackoverflow.com/a/7627962/1077650

this class of regex will repeatably (and silently) crash Apache/PHP with an unhandled segmentation fault due to a stack overflow!

PHP Bug 1: PHP sets: pcre.recursion_limit too large.

PHP Bug 2: preg_match() does not return FALSE on error.



来源:https://stackoverflow.com/questions/3021316/preg-match-and-long-strings

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!