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

普雷格匹配和长字符串

  •  3
  • user1651105  · 技术社区  · 14 年前

    这是我试图用来在文本文件中查找特定文本的preg_匹配项。

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

    然而,结果总是 Found 再也没有了。结果数组为空。现在我读到preg-u比赛不能用长串。

    我的文本文件大约是300kb,所以大概有300000个字符。

    我百分之百确信搜索到的字符串在文本文件中,preg_match函数返回的值大于0意味着它找到了它,但它没有以某种方式将其放入结果数组中。

    所以我的问题是,我如何使它工作?

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

    2 回复  |  直到 6 年前
        1
  •  8
  •   cletus    14 年前

    你会很高兴我找到这个问题的。从php 5.2开始,他们对pcre函数可以使用的文本大小进行了限制,默认值为100k,这还不错。最糟糕的是 默默失败 如果大于这个。

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

        2
  •  0
  •   4wk_ alxp    6 年前

    不,别上去 pcre 极限。做事不要不理解。这是PHP PCRE的常见错误

    请阅读@ridgerunner提供的精彩答案: https://stackoverflow.com/a/7627962/1077650

    由于堆栈溢出,此类regex将以未处理的分段错误重复(且无提示)崩溃apache/php!

    php bug 1:php集: pcre.recursion_limit 太大了。

    PHP错误2: preg_match() 出错时不返回false。