首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 正則擷取 HTML 內圖片網址:preg_match_all 完整範例與邊界處理

     編輯:PHP 相關知識

需求

從富文本內容中提取所有 <img src="..."> 的網址。

基本正則

<?php
$html = '...內容包含 圖片 ...';
$pattern = '/]+src=["\']([^"\']+)["\'][^>]*>/i';
preg_match_all($pattern, $html, $matches);
$urls = $matches[1]; // 第 1 捕獲群組即為網址
print_r($urls);

進階:支援單雙引號、屬性順序、data-src

$pattern = '/<(?:img|input)[^>]+(?:src|data-src)=["\']([^"\']+)["\'][^>]*>/i';

更健壯:DOMDocument 解析(推薦)

<?php
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML('' . $html);
libxml_clear_errors();

$urls = [];
foreach ($dom->getElementsByTagName('img') as $img) {
    $src = $img->getAttribute('src') ?: $img->getAttribute('data-src');
    if ($src) $urls[] = $src;
}
// 同時處理 input type=image
foreach ($dom->getElementsByTagName('input') as $input) {
    if ($input->getAttribute('type') === 'image') {
        $src = $input->getAttribute('src');
        if ($src) $urls[] = $src;
    }
}
$urls = array_unique($urls);

相對網址轉絕對網址

$base = 'https://example.com/article/123';
$absolute = array_map(fn($u) => (parse_url($u, PHP_URL_SCHEME) ? $u : rtrim($base, '/') . '/' . ltrim($u, '/')), $urls);

結語

簡單場景用正則 preg_match_all 快速提取;複雜、巢狀、編碼不一致的 HTML 請改用 DOMDocument,正確率與維護性遠勝正則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved