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

正則表達式完整指南:精準匹配 URL 與網址的多種模式

     編輯:Java 綜合教學

正則表達式匹配 URL 的核心模式解析

在處理文字資料時,從海量文本中精準提取網址是常見需求。正則表達式雖然強大,但 URL 結構複雜(協議、域名、埠號、路徑、查詢參數、片段識別符),單一模式難以覆蓋所有情況。本文整理多種實戰驗證的正則模式,涵蓋 HTTP/HTTPS/FTP 協議、IP 位址、域名、埠號、路徑參數等場景,並附帶匹配/不匹配範例,供開發者依據業務需求選擇。

基礎版:匹配標準 HTTP/HTTPS/FTP 網址

(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
  • 匹配範例: https://regxlib.com/Default.aspx、https://electronics.cnet.com/electronics/0-6342366-8-8994967-1.html
  • 不匹配: www.yahoo.com(缺少協議頭)
  • 適用場景: 快速提取帶協議頭的標準網址,適合日誌分析、爬蟲初步過濾。

進階版:支援 IP 位址、埠號、認證資訊的嚴格驗證

^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.[a-zA-Z]{2,4})(\:[0-9]+)?(/[^/][a-zA-Z0-9\.\,\?\'\\/\+&%\$#\=~_\-@]*)*$
  • 匹配範例: https://www.sysrage.net、https://64.81.85.161/site/file.php?cow=moo's、ftp://user:pass@host.com:123
  • 不匹配: sysrage.net(缺少協議)
  • 特點: 驗證 IPv4 格式、支援用戶認證、埠號、複雜查詢參數,適合表單驗證、安全過濾。

通用版:兼容 www 開頭、無協議頭的常見寫法

^(((ht|f)tp(s?))\://)?(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+))*$
  • 匹配範例: www.blah.com:8103、www.blah.com/blah.asp?sort=ASC、www.blah.com/blah.htm#blah
  • 不匹配: www.state.ga(非標準頂級域)、https://www.blah.ru(未列入允許的 TLD 列表)
  • 注意: 頂級域名列表需隨 IANA 更新維護,現代應用建議改用更寬鬆的域名匹配策略。

強健提取版:從文本中智能提取 URL(含括號、標點處理)

\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
  • 匹配範例: 文本中的 https://foo.com/blah_blah、(Something like https://foo.com/blah_blah)、<https://foo.com/blah_blah>、https://userid:password@example.com:8080
  • 不匹配: no_ws.example.com、/relative_resource.php
  • 優勢: 處理尾隨標點(句號、逗號)、括號包裹、尖括號包裹等真實文本場景,適合聊天記錄、郵件內容解析。

其他實用模式速查

用途正則模式說明
UNC 路徑 (Windows 網路路徑)^\\{2}[\w-]+\\(([\w-][\w-\s]*[\w-]+[\$]?$)|([\w-][\$]?$))匹配 \\server\service、\\serv_001\service$
本地檔案路徑^([a-zA-Z]\:|\\\\[^\/\\:*?"<>|]+\\[^\/\\:*?"<>|]+)(\\[^\/\\:*?"<>|]+)+(\.[^\/\\:*?"<>|]+)$匹配 c:\Test.txt、\\server\shared\Test.txt
域名格式驗證^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$匹配 regexlib.com、3com.com,排除連字符開頭/結尾

選型建議與最佳實踐

  1. 輸入驗證(表單、API):使用嚴格版,確保協議、域名/IP、埠號格式正確。
  2. 文本提取(爬蟲、日誌分析):使用強健提取版,最大化召回率,後續再做清洗。
  3. 前端展示/鏈接化:結合通用版與強健版,優先識別帶協議的 URL,再補充 www 開頭格式。
  4. 效能考量:避免過度嵌套量詞(如 `(.*)*`),優先使用具體字符類別(`[^\s()<>]`),必要時預編譯正則對象。

正則表達式是把雙刃劍,複雜模式難以維護。建議在專案中封裝為工具類,附上完整測試用例(正向/負向),並隨業務演進持續優化。現代開發中,亦可考慮使用成熟庫(如 Java `java.net.URL` 解析、Python `urllib.parse`、JS `URL` API)輔助驗證,以正則為補充,構建更可靠的 URL 處理體系。

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