这是我以前给 PHP 官方提交的一个问题,现在挖个坟
问题来源
这是 PHP 正则表达式的一个 “bug”,问题例子在此
打开 在线 PHP 运行,将源码执行一下,可以注意到
可以看到在 php7.2 上居然正则表达式居然匹配不到结果!
问题解决
尽管我知道问题所在,但我还是给 PHP 官方提交了 bug
简单说就是:PHP 的 preg_*
正则函数在面对如此庞大的字符串时会造成堆栈空间耗尽,以至于得不到正确的结果
解决办法就是在正则之前关闭 JIT:
ini_set('pcre.jit', 0);
JIT(Just-In-Time)编译,是一种将代码转换为另一种字节码(比如运行它的机器 CPU 的本地代码)的技术。 JIT 可以使程序运行更快
我坚持觉得 PHP7 不同版本表现出不一样的结果就是个 bug,遗憾的是,官方对我使用如此庞大的正则的行为表示困惑,并不认为这是个 bug……
但是仔细一想,官方说的也有道理,毕竟……我这段庞大的正则来源就是某个无脑的客户要求的,正常情况下谁会这么干(甩锅!!!)