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

Java 正則表達式提取網頁所有圖片路徑完整實作

     編輯:Java 相關知識

使用 Java 正則表達式從 HTML 中提取圖片 URL

在網頁爬蟲、內容分析、資料遷移等場景中,經常需要從 HTML 原始碼中提取所有圖片的 URL。本文提供一個健壯的工具方法,支援主流圖片格式,處理單雙引號、屬性順序等變化。

支援的圖片格式

方法涵蓋 20 種常見格式:.jpg、.jpeg、.png、.gif、.bmp、.svg、.webp、.tiff、.ico 等。

核心實作代碼

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 從 HTML 原始碼提取圖片 src 路徑
 * @param htmlCode HTML 字串
 * @return 圖片 URL 列表,無圖片時返回空列表
 */
public static List<String> getImageSrc(String htmlCode) {
    List<String> imageSrcList = new ArrayList<>();
    
    // 正則解析:
    // <img\\b[^>]*\\bsrc\\b\\s*=\\s*('|")?([^'">\s]+(\.jpg|\.jpeg|\.png|\.gif|\.bmp|\.svg|\.webp|\.tiff?|\.ico|\.png|\.bmp|\.gif|\.jpg|\.jpeg|\.svg|\.webp|\.tiff?|\.ico)\\b)[^>]*>
    String regex = "<img\\b[^>]*\\bsrc\\b\\s*=\\s*('|\")?([^'\">\\s]+(\\.jpg|\\.jpeg|\\.png|\\.gif|\\.bmp|\\.svg|\\.webp|\\.tiff?|\\.ico)\\b)[^>]*>";
    
    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(htmlCode);
    
    while (matcher.find()) {
        String quote = matcher.group(1); // 引號字元(單引號/雙引號/無)
        String src = matcher.group(2);   // 圖片 URL
        
        // 處理無引號情況下可能包含的額外屬性
        if (quote == null || quote.isEmpty()) {
            src = src.split("\\s+")[0];
        }
        
        imageSrcList.add(src);
    }
    
    return imageSrcList;
}

正則表達式詳細拆解

片段說明
<img\\b匹配 <img 標籤開頭,單字邊界避免匹配 <image
[^>]*匹配任意非 > 字元(其他屬性)
\\bsrc\\b精確匹配 src 屬性名
\\s*=\\s*匹配等號及前後空白
('|\")?可選的單引號或雙引號
([^'\">\\s]+\\.(?:jpg|jpeg|png|...))捕獲組:圖片 URL(支援多種副檔名)
[^>]*>匹配標籤結尾

使用範例

String html = "<div><img src='logo.png'><img src=\\"banner.jpg\\" alt='廣告'><img src=icon.gif></div>";
List<String> images = getImageSrc(html);
// 結果:[logo.png, banner.jpg, icon.gif]

注意事項與最佳實踐

  • HTML 解析器優先:對於複雜、不規範 HTML,建議使用 Jsoup 等專業解析器,正則僅適用於結構簡單、格式固定的場景
  • 相對路徑處理:提取後可能需配合 URI.resolve() 轉為絕對 URL
  • 效能考量:大量文本建議預編譯 Pattern 實例複用
  • 擴展性:新增圖片格式只需在正則中追加副檔名

進階版:支援 data URI 與背景圖片

若需提取 CSS background-image 或 data:image/... 格式,可擴展正則或改用 HTML 解析器遍歷 DOM 節點屬性。

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