Java 正則表達式綜合實戰:URL 匹配與源碼解析

在 Web 應用開發中,我們經常需要對 URL 進行格式驗證。今天我們結合 Java 的 PatternMatcher 類,深入理解正則表達式在實際應用中的強大功能,并剖析一段實際的 Java 示例源碼。

?

package com.RegExpInfo;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Exercise02 {public static void main(String[] args) {
//        String content="https://";
//        String content="http://";
//        String content="https://" +
//                "www.bilibili.com/";
//        String content="https://" +
//                "www.bilibili.com/" +
//                "video/" +
//                "BV1fh411y7R8?spm_id_from=333.788.player.switch&vd_" +
//                "source=6fe96db28441a84c79edc35a022cf1c5&p=895" ;
//        String content="https://" +
//                "www.bilibili.com" ;String content="https://blog.csdn.net/keshi12354?spm=1000.2115.3001.5343";
//        String regExp="^((https|http)://)";
//        (2)
//        String regExp="^((https|http)://)([\\w-]+\\.)+[\\w-]+\\/";
//        (3)String regExp="^((https|http)://)([\\w-]+\\.)+[\\w-]+(\\/([\\w-_?=&./]*))?$";
//        String regExp="^((https|http)://)([\\w-]+\\.)+[\\w-]+(\\/([\\w-_?=&./]*))?$";Pattern pattern = Pattern.compile(regExp);Matcher matcher = pattern.matcher(content);while (matcher.find()) {System.out.println(matcher.group(0));}}
}

1.正則表達式分解:

分布實現:
1. 基礎協議匹配?(1)

 String regExp="^((https|http)://)";
  • 功能:只匹配URL開頭的協議部分

  • 匹配內容http://?或?https://

  • 結構

    • ^?表示字符串開始

    • (https|http)?匹配"https"或"http"

    • ://?匹配協議分隔符

  • 目的:先確保能正確識別URL的協議部分

2. 添加域名匹配?(2)

 String regExp="^((https|http)://)([\\w-]+\\.)+[\\w-]+\\/";
  • 新增功能:在協議后添加域名和路徑的基本匹配

  • 匹配內容:如?http://example.com/

  • 新增結構

    • ([\\w-]+\\.)+?匹配一個或多個域名部分(如"www."或"sub.")

      • \\w?匹配單詞字符(字母、數字、下劃線)

      • -?匹配連字符

      • +?表示一次或多次

      • \\.?匹配點號

    • [\\w-]+?匹配頂級域名(如"com")

    • \\/?匹配結尾的斜杠

  • 目的:擴展匹配完整的域名結構

?

3. 添加路徑和查詢參數匹配?(3)

 String regExp="^((https|http)://)([\\w-]+\\.)+[\\w-]+(\\/([\\w-_?=&./]*))?$";
  • 新增功能:支持可選的路徑和查詢參數

  • 匹配內容:如?http://example.com/path?param=value

  • 新增結構

    • (\\/([\\w-_?=&./]*))?

      • \\/?匹配路徑開始的斜杠

      • [\\w-_?=&./]*?匹配路徑和查詢參數

        • 包含字母、數字、下劃線、連字符、問號、等號、&、點和斜杠

      • ??表示整個路徑部分是可選的

    • $?表示字符串結束

  • 目的:使正則表達式能夠匹配帶路徑和參數的完整URL

?4. 最終優化版本

String regExp="^((https|http)://)?([\\w-]+\\.)+[\\w-]+(\\/([\\w-_?=&./]*))?$";
  • 關鍵改進:使協議部分變為可選

  • 匹配內容:現在可以匹配:

    • 帶協議的URL:http://example.com/path

    • 不帶協議的URL:example.com/path

  • 修改點

    • 在協議部分?((https|http)://)?后添加了???使其變為可選

  • 目的:提高正則表達式的靈活性,適應更多使用場景

5.設計思想總結

  1. 漸進式開發:從簡單到復雜逐步構建正則表達式

  2. 模塊化設計:每個部分都有明確的功能劃分(協議、域名、路徑)

  3. 靈活性增強:通過添加可選標記(?)使表達式更通用

  4. 邊界明確:始終使用^$確保匹配整個字符串

  5. 字符集合理定義:使用[\w-]等字符集準確描述允許的字符

這種分步構建的方法不僅使正則表達式更易于理解和維護,也方便在開發過程中逐步測試每個部分的匹配效果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901454.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

蝦分發平臺平臺優勢

平臺優勢 高效與成本優化 一鍵分發與自動化工具減少人工操作,加速測試周期;免費分發流量和透明價格套餐降低中小團隊開支。 安全與合規 自研CDN與封裝技術平衡性能與安全性,適配復雜分發場景;全球CDN網絡加速保障極速下載。 服務…

c語言學習16——內存函數

內存函數 一、memcpy使用和模擬實現1.1參數1.2 使用1.3 模擬實現 二、memmove使用和模擬實現2.1 參數2.2 使用2.3 模擬實現 三、memset使用3.1 參數3.2 使用 四、memcmp使用4.1 參數4.2 使用 一、memcpy使用和模擬實現 1.1參數 因為內存中不知道存的是什么類型的地址&#xff…

TLA:用于接觸-豐富操作的觸覺-語言-動作模型

25年3月來自三星中國研發中心、中科院自動化所和北京智源的論文“TLA: Tactile-Language-Action Model for Contact-Rich Manipulation”。 視覺-語言模型已取得顯著進展。然而,在語言條件下進行機器人操作以應對接觸-密集型任務方面,仍未得到充分探索&…

【JavaEE】SpringBoot 統一功能處理

目錄 一、攔截器1.1 使用1.1 定義攔截器1.2 注冊配置攔截器 1.2 攔截器詳解1.2.1 攔截路徑1.2.2 攔截器執?流程 1.3 適配器模式 二、統一數據返回格式2.1 簡單用法2.2 問題及解決 三、統一異常處理 一、攔截器 攔截器:攔截器是Spring框架提供的核?功能之?&#…

【前端實戰】使用 BroadcastChannel API 實現跨標簽頁通信

一、引言 在現代 Web 應用開發中,我們常常會遇到需要在不同瀏覽器標簽頁之間進行通信的需求。例如,在一個電商應用中,用戶在一個標簽頁中添加商品到購物車,希望在其他標簽頁中也能實時顯示購物車的更新信息。傳統的實現方式可能會…

微信小程序 - [渲染層錯誤] Uncaught TypeError: Cannot read property ‘D‘ of undefined

問題:[渲染層錯誤] Uncaught TypeError: Cannot read property D of undefined 解決: 該錯誤可能還是小程序的渲染模式有關系,查看app.json中是否有如下配置,刪除即可,或者降低小程序調試基礎庫版本。

【MySQL高級】事務,存儲引擎,索引(一)

Mysql高級 DQL查詢語句 反引號 模糊查詢避免%出現在開頭,會造成索引失效 order by排序先后 表名列名都需要用${},他們不能帶’’ 去重統計數量 null的運算 分組函數會自動忽略null,不用對null進行處理 截取子串substr(字段,下標…

面試篇 - GPT-1(Generative Pre-Training 1)

GPT-1(Generative Pre-Training 1) ?模型結構 Transformer only-decoder:GPT-1模型使用了一個12層的Transformer解碼器。具體細節與標準的Transformer相同,但位置編碼是可訓練的。 注意力機制: 原始Transformer的解…

ubuntu24.04 cmake 報錯 libldap-2.5.so.0 解決辦法

apt cmake有毛病 換源重新安裝 wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add - sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" sudo apt update sudo apt in…

ScholarCopilot:“學術副駕駛“

這里寫目錄標題 引言:學術寫作的痛點與 AI 的曙光ScholarCopilot 的核心武器庫:智能生成與精準引用智能文本生成:不止于“下一句”智能引用管理:讓引用恰到好處 揭秘背后機制:檢索與生成的動態協同快速上手&#xff1a…

vivo X200 Ultra前瞻系列(2):vivo X200 Ultra影像技術溝通會總結

vivo于今日(2025年4月14日)舉辦的“X系列藍圖影像技術溝通會”中,正式發布了vivo X200 Ultra,展示了其在移動影像領域的多項技術突破。以下是本次溝通會的核心內容總結: 1. 硬件革新:蔡司三焦段鏡頭與雙芯架構 蔡司三大定焦大師鏡頭: X200 Ultra采用14mm超廣角(“鷹眼”…

代碼隨想錄第17天:二叉樹

一、二叉搜索樹的最近公共祖先(Leetcode 235) 由于是二叉搜索樹,節點的值有嚴格的順序關系:左子樹的節點值都小于父節點,右子樹的節點值都大于父節點。利用這一點,可以在樹中更高效地找到最低公共祖先。 c…

C++中string庫常用函數超詳細解析與深度實踐

目錄 一、引言 二、基礎準備:頭文件與命名空間 三、string對象的創建與初始化(基礎) 3.1 直接初始化 3.2 動態初始化(空字符串) 3.3 基于字符數組初始化 3.4 重復字符初始化 四、核心函數詳解 4.1 字符串長度相關 4.1.1 …

LanDiff:賦能視頻創作,語言與擴散模型的融合力量

自從 Wan 2.1 發布以來,AI 視頻生成領域似乎進入了一個發展瓶頸期,但這也讓人隱隱感到:“DeepSeek 時刻”即將到來!就在前幾天,浙江大學與月之暗面聯合推出了一款全新的文本到視頻(T2V)生成模型…

【本地圖床搭建】寶塔+Docker+MinIO+PicGo+cpolar:打造本地化“黑科技”圖床方案

寫在前面:本博客僅作記錄學習之用,部分圖片來自網絡,如需引用請注明出處,同時如有侵犯您的權益,請聯系刪除! 文章目錄 前言寶塔安裝DockerMinIO 安裝與設置cploar內網穿透PicGo下載與安裝typora安裝總結互動…

centos-LLM-生物信息-BioGPT-使用1

參考: GitHub - microsoft/BioGPT https://github.com/microsoft/BioGPT BioGPT:用于生物醫學文本生成和挖掘的生成式預訓練轉換器 |生物信息學簡報 |牛津學術 — BioGPT: generative pre-trained transformer for biomedical text generation and mini…

高效爬蟲:一文掌握 Crawlee 的詳細使用(web高效抓取和瀏覽器自動化庫)

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 一、Crawlee概述1.1 Crawlee介紹1.2 為什么 Crawlee 是網頁抓取和爬取的首選?1.3 為什么使用 Crawlee 而不是 Scrapy1.4 Crawlee的安裝二、Crawlee的基本使用2.1 BeautifulSoupCrawler的使用方式2.2 ParselCrawler的使…

架構總覽怎么寫,才算工業級?

??系統架構文檔是整個項目最重要的起點,但很多人第一章就“寫穿了”: 不是寫得太細,就是沒有重點。想要寫出高質量、能協作、能傳承的架構文檔,這一篇會告訴你應該怎么做—— ? 架構總覽的終極目標 明確邊界、定義角色、畫清數據流 別講執行細節,別深入函數調用。 ? 架…

優先級隊列(堆二叉樹)底層的實現:

我們繼續來看我們的優先級隊列: 優先級隊列我們說過,他也是一個容器適配器,要依賴我們的容器來存儲數據; 他的第二個參數就是我們的容器,這個容器的默認的缺省值是vector,然后他的第三個參數,我…

GIC驅動程序分析

今天呢,我們就來具體的講一下GIC的驅動源碼啦,這個才是重點來著,我們來看看: GIC中的重要函數和結構體: 沿著中斷的處理流程,GIC涉及這4個重要部分: CPU從異常向量表中調用handle_arch_irq&am…