本文總結三種常用正則模式,分別針對完整 URL、img 標籤 src 屬性、帶副檔名過濾的通用匹配,並提供 KindEditor 內容提取第 N 張圖片的實戰技巧。
function getimages($str) {
$match_str = "/((https://)+([^ \r\n()^$!`\"'|\[\]{}<>]*)((.gif)|(.jpg)|(.bmp)|(.png)|(.GIF)|(.JPG)|(.PNG)|(.BMP)))/";
preg_match_all($match_str, $str, $out, PREG_PATTERN_ORDER);
return $out;
}
/<img.*src\s*=\s*[\"']?\s*([^>\"'\s]*)/i
實戰:KindEditor 內容中提取第 N 張圖片作為縮略圖:
preg_match_all("/<img.*src\s*=\s*[\"']?\s*([^>\"'\s]*)/i", str_ireplace('\\', '', $content), $arr);
// $arr[1] 為所有圖片地址數組
$ext = 'gif|jpg|jpeg|bmp|png';
preg_match_all("/(href|src)=([\"']?)([^ \"'>]+.($ext))\2/i", $str, $matches);
// $matches[3] 為純淨圖片地址
$newstext = preg_replace('/(<img[^>]+src\s*=\s*[\"']?([^>\"'\s]+)[\"']?[^>]*>)/im', '<a href="$2">$1</a>', $newstext);
說明:$0 整體匹配,$1 第一個括號組,$2 第二個括號組(此處為圖片地址)。
str_replace:純字符替換。preg_replace:正則替換,支援回引用。