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

Java 正則表達式提取 URL Host 的實戰範例

     編輯:Java 程式設計入門

在 Java 開發中,從 URL 字串中解析出主機名是常見需求。雖然可使用 java.net.URL 類別,但正則表達式提供更輕量、靈活的替代方案,尤其適合簡單解析場景。

核心實現

以下方法使用正向前瞻斷言 (?<=//|) 定位協議後的雙斜線或字串開頭,隨後匹配由字母數字、底線與點組成的主機名:

public static String getHost(String url) {
    if (url == null || url.trim().isEmpty()) {
        return "";
    }
    String host = "";
    // 正則:(?<=//|) 表示前面是 // 或字串開頭;((\w)+\.)+\w+ 匹配域名結構
    Pattern pattern = Pattern.compile("(?<=//|)((\\w)+\\.)+\\w+");
    Matcher matcher = pattern.matcher(url);
    if (matcher.find()) {
        host = matcher.group();
    }
    return host;
}

關鍵點解析

  • 正向前瞻 (?<=//|):不消耗字元,僅確保匹配位置緊跟 // 或字串起始,避免協議部分被捕獲。
  • ((\w)+\.)+\w+:匹配 www.example.com 這類結構,\w 涵蓋字母、數字、底線。
  • 邊界情況:輸入為 null 或空白時直接返回空字串,避免 NullPointerException。

測試範例

輸入 URL輸出 Host
https://www.example.com/pathwww.example.com
https://api.service.org:8080api.service.org
ftp://files.demo.netfiles.demo.net
localhost:8080localhost

優缺點權衡

優點:無需拋棄式解析、效能較好、程式碼簡潔。

缺點:無法處理 IPv6 位址([::1])、帶認證資訊的 URL(user:pass@host)或非標準連接埠;嚴格場景建議改用 java.net.URI 或 HttpClient 解析。

進階建議

若專案已引入 Apache HttpClient,可直接使用 URIBuilder 或 HttpHost 獲得更健壯的解析;若為 Android 環境,android.net.Uri 同樣提供開箱即用的 getHost()。

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