本来以为自己对正则已经很熟悉,最近又学到了一个,虽然是配置上的问题,不过也学习了。
使用preg_replace 处理长字符串时,返回null的原因
http://de.php.net/manual/de/pcre.configuration.php
官方文档
这些函数的行为受 php.ini 中的设置影响。 PCRE配置选项 名字 默认 可修改范围 更新日志 pcre.backtrack_limit "100000" PHP_INI_ALL php 5.2.0可用. pcre.
"100000" PHP_INI_ALL php 5.2.0可用. 有关 PHP_INI_* 样式的更多详情与定义,见 配置可被设定范围。 这是配置指令的简短说明。 pcre.backtrack_limit integer PCRE的回溯限制. pcre.recursion_limit integer PCRE的递归限制. 请注意, 如果 讲这个值设置为一个很大的数字, 你可能会消耗掉 所有的进程可用堆栈, 最终导致php崩溃(直到达到系统限制的堆栈大小).
由于在匹配到前,内容太多,回溯和匹配过多,导致NULL
所以只要
ini_set('pcre.backtrack_limit',1000000); ini_set('pcre.recursion_limit',1000000); //通常够用,不沟通,适当加大即可。