首页 > php > php中preg_match_all只能匹配100000字节的限制
2021
03-11

php中preg_match_all只能匹配100000字节的限制

背景

用preg_match_all匹配时,偶尔会匹配失败,只能匹配到一部分符合的数据,代码如下:

//获取html文本中的a标签,然后获取 标签 <>之间的内容
function get_tag_from_html($content)
{
    $pattern = "/(<a(.*)>(.*)<\/a>)|(<.*?>)/";
    preg_match_all($pattern, htmlspecialchars_decode($content), $match);
    $imgs = isset($match[0]) ? $match[0] : [];
    return $imgs;
}

用正则从字符串中提取内容失败,反复检查字符串和正则表达式,都没有问题。后来发现失败的情况是字符串富文本特别长的问题,因此怀疑是不是preg_match也有字符串长度限制!

preg_match、preg_match_all都会有这种情况。


解决方法

1、ini_set('pcre.backtrack_limit', 1000000); //默认的只有100000
2、修改 php.ini 的pcre.backtrack_limit参数,使之支持更大的字符串。加入配置:pcre.backtrack_limit=-1


本文》有 0 条评论

留下一个回复