【话说 PHP7】正则表达式 JIT 的坑

icy2003 程序 2020-07-27 13:45:47 1084 0条

这是我以前给 PHP 官方提交的一个问题,现在挖个坟

问题来源

这是 PHP 正则表达式的一个 “bug”,问题例子在此

打开 在线 PHP 运行,将源码执行一下,可以注意到

42579-x4iskrox89f.png

可以看到在 php7.2 上居然正则表达式居然匹配不到结果!

问题解决

尽管我知道问题所在,但我还是给 PHP 官方提交了 bug

简单说就是:PHP 的 preg_* 正则函数在面对如此庞大的字符串时会造成堆栈空间耗尽,以至于得不到正确的结果

解决办法就是在正则之前关闭 JIT:

ini_set('pcre.jit', 0);

JIT(Just-In-Time)编译,是一种将代码转换为另一种字节码(比如运行它的机器 CPU 的本地代码)的技术。 JIT 可以使程序运行更快

我坚持觉得 PHP7 不同版本表现出不一样的结果就是个 bug,遗憾的是,官方对我使用如此庞大的正则的行为表示困惑,并不认为这是个 bug……

但是仔细一想,官方说的也有道理,毕竟……我这段庞大的正则来源就是某个无脑的客户要求的,正常情况下谁会这么干(甩锅!!!)

标签: php

非特殊说明,本博所有文章均为博主原创。