如何为PHP 7.2修复此正则表达式以避免PREG_JIT_STACKLIMIT_ERROR?

时间:2019-03-28 21:27:32

标签: php regex php-7 preg-replace-callback

我正在将一些代码(继承)从PHP 5.4移到PHP 7.2。以下preg_replace_callback失败,并显示preg_last_error为PREG_JIT_STACKLIMIT_ERROR,并返回空字符串。当主题字符串超过一定长度时会发生这种情况:

$string = preg_replace_callback( "/\?>((.|\n)*?)<\?(php)?/","eval_mixed_helper",$string,-1,$count);

我发现了一些讨论。如果我使用ini_set('pcre.jit',false);问题消失了,但是我不确定这是最好的解决方案。

无论如何我都不是正则表达式专家,所以我想知道如何改进preg_replace_callback中的模式以避免这种溢出。我认为它的作用是匹配php结束标记和下一个php开始标记之间的任何html块。

我也尝试过:

"/\?>((.)*?)<\?(php)?/s"

...可能会更进一步,但仍然失败。

0 个答案:

没有答案