用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