3 或者 $length = 0时,强制使用正则模式,因为取的数量大时,正则速度更快。 * @return array 图片地址的集合数组,若无则返回空数组 */ public static function srcList($data, $startNum = 1, $length = 0, $order = 'asc', $blacklist = false, $model = 'preg'){ if($model === 'preg' || $length > 3 || $length === 0){ $imgSrcArr = self::pregModel($data, [$startNum-1, $length, $blacklist], $order); }else{ $imgSrcArr = []; for($i=$startNum; $i<$startNum+$length; $i++){ $imgSrc = self::strModel($data, $i, $order); if(is_array($blacklist)){ $blackBool = true; foreach ($blacklist as $k=>$v){ if (strpos($imgSrc, $blacklist) !== false) { $blackBool = false; } } if($blackBool){ $imgSrcArr[] = $imgSrc; }else{ $length++; } }else{ if ($blacklist === false || strpos($imgSrc, (string)$blacklist) === false) { $imgSrcArr[] = $imgSrc; }else{ $length++; } } } } return $imgSrcArr; } /** * @param $str * @param $num * @param $order * @return bool|string|null */ public static function strModel($str, $num, $order){ $topStr = null; if($order != 'asc'){ $funcStr = 'strrpos'; }else{ $funcStr = 'strpos'; } for($i=1; $i<=$num; $i++){ $firstNum = $funcStr($str, '/isU", $str, $ereg); $img = $ereg[0]; if($order != 'asc'){ $img = array_reverse($img); }; if(is_array($num)){ $startNum = $num[0]; $length = $num[1]; $blacklist = $num[2]; $imgSrcArr = []; foreach($img as $key=>$value){ $imgSrc = $value; $pregModel='/src=(\'|")(.*)(?:\1)/isU'; preg_match_all($pregModel, $imgSrc, $img1); if(is_array($blacklist)){ $blacklistBool = true; foreach($blacklist as $v){ if(strpos($img1[2][0], $v) !== false){ $blacklistBool = false; }; } if($blacklistBool){ $imgSrcArr[] = $img1[2][0]; }; } else { if ($blacklist === false || strpos($img1[2][0], (string)$blacklist) === false) { $imgSrcArr[] = $img1[2][0]; }; } } if($length > 0){ return array_slice($imgSrcArr, $startNum, $length); }else{ return array_slice($imgSrcArr, $startNum); } }else{ if(!empty($img[$num])){ $imgStr = $img[$num]; $pregModel='/src=(\'|")(.*)(?:\1)/isU'; preg_match_all($pregModel, $imgStr, $img1); return $img1[2][0]; }else{ return null; } } } } /* $str = '
这里是普通文字
这里是干扰元素测试\'\'"""