背景
用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 条评论