我的 preg_match_all 语句有问题。它一直在完美地工作,因为我一直在输入一篇文章,但是在它经过一定长度后突然停止工作。这是功能的一个已知问题,在这么多字符之后它什么都不做?
$number = preg_match_all("/(<!-- ([\w]+):start -->)\n?(.*?)\n?(<!-- \\2:stop -->)/s", $data, $matches, PREG_SET_ORDER);
它一直运行良好,并且在其他页面上运行良好,但是一旦那篇文章超过了一定的长度,噗,它就停止为那篇文章工作了。我可以使用另一种解决方案来使其适用于更长的文本块吗?正在处理的文章长度约为 33,000 个字符(包括空格)。
我以前问过这样的问题,但只得到一个我从未实际测试过的答案。上一次我刚刚找到了另一种方法来解决那个特定的场景,但是这次没有办法解决它,因为它都是一篇文章。我尝试更改pcre.backtrack_limit
甚至pcre.recursion_limit
高达 500,000,但完全没有效果。关于为什么会发生这种情况以及我可以做些什么来让它继续工作,即使对于这些大量的文本块,还有其他想法吗?30,000 个字符的限制似乎有点低,只有 5,000-6,000 个字(这个大约是 5,700 个)。在这里将其分开并不是一个真正的选择,因为如果它们位于两个单独的文本块中,它将找不到开始和停止。