我正在将一些代码(继承)从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"
...可能会更进一步,但仍然失败。