正則表達式全解析 + Java常用示例

目錄

    • 一、正則表達式基礎
      • (一)元字符
      • (二)字符集
      • (三)量詞
    • 二、正則表達式常用示例
      • (一)驗證郵箱格式
      • (二)驗證電話號碼格式
      • (三)提取網頁中的鏈接
      • (四)驗證日期格式
      • (五)驗證URL格式
    • 三、正則表達式在Java中的應用
      • (一)匹配操作
      • (二)替換操作
      • (三)分割操作
    • 四、總結

一、正則表達式基礎

正則表達式是一種用于匹配字符串的強大工具。它使用特定的語法來定義匹配模式,可以在文本處理、表單驗證、數據提取等場景中發揮重要作用。

(一)元字符

元字符是正則表達式中的特殊字符,具有特殊含義。常見的元字符包括:

  • . :匹配除換行符以外的任意單個字符。
  • ^ :匹配字符串的開始位置。
  • $ :匹配字符串的結束位置。
  • * :匹配前面的子表達式零次或多次。
  • + :匹配前面的子表達式一次或多次。
  • ? :匹配前面的子表達式零次或一次。
  • {n} :匹配前面的子表達式恰好 n 次。
  • {n,m} :匹配前面的子表達式至少 n 次,至多 m 次。
  • [] :定義一個字符集合,匹配其中的任意一個字符。
  • | :匹配左邊或右邊的表達式。
  • () :捕獲括號內的表達式,形成一個分組。

(二)字符集

字符集用于定義一組字符,匹配其中的任意一個字符。常見的字符集包括:

  • [abc] :匹配 a、b 或 c。
  • [a-z] :匹配小寫字母 a 到 z。
  • [A-Z] :匹配大寫字母 A 到 Z。
  • [0-9] :匹配數字 0 到 9。
  • [a-zA-Z0-9] :匹配字母或數字。

(三)量詞

量詞用于指定前面的字符或子表達式出現的次數。常見的量詞包括:

  • * :零次或多次。
  • + :一次或多次。
  • ? :零次或一次。
  • {n} :恰好 n 次。
  • {n,m} :至少 n 次,至多 m 次。

二、正則表達式常用示例

(一)驗證郵箱格式

郵箱格式通常由本地部分、@ 符號和域名部分組成。本地部分可以包含字母、數字、下劃線、點和短橫線,域名部分可以包含字母、數字、點和短橫線。

public class EmailValidation {public static void main(String[] args) {String regex = "^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";String email1 = "test@example.com";String email2 = "invalid_email";System.out.println(email1.matches(regex)); // 輸出:trueSystem.out.println(email2.matches(regex)); // 輸出:false}
}

(二)驗證電話號碼格式

電話號碼格式可能因國家和地區而異。以下示例驗證一個簡單的電話號碼格式,例如:123-456-7890。

public class PhoneNumberValidation {public static void main(String[] args) {String regex = "^\\d{3}-\\d{3}-\\d{4}$";String phone1 = "123-456-7890";String phone2 = "1234567890";System.out.println(phone1.matches(regex)); // 輸出:trueSystem.out.println(phone2.matches(regex)); // 輸出:false}
}

(三)提取網頁中的鏈接

在網頁中,鏈接通常以 <a> 標簽的形式出現,href 屬性包含鏈接的 URL。

import java.util.regex.*;public class LinkExtractor {public static void main(String[] args) {String html = "<html><body><a href='https://example.com'>Example</a></body></html>";String regex = "href=['\"](.*?)['\"]";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(html);while (matcher.find()) {System.out.println(matcher.group(1)); // 輸出:https://example.com}}
}

(四)驗證日期格式

日期格式通常為 YYYY-MM-DD 或 MM/DD/YYYY 等。以下示例驗證 YYYY-MM-DD 格式。

public class DateValidation {public static void main(String[] args) {String regex = "^\\d{4}-\\d{2}-\\d{2}$";String date1 = "2023-10-11";String date2 = "10/11/2023";System.out.println(date1.matches(regex)); // 輸出:trueSystem.out.println(date2.matches(regex)); // 輸出:false}
}

(五)驗證URL格式

URL 格式通常包括協議、域名和路徑等部分。以下示例驗證一個簡單的 URL 格式。

public class URLValidation {public static void main(String[] args) {String regex = "^(http|https)://[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}(/[^\\s]*)?$";String url1 = "https://example.com";String url2 = "ftp://example.com";System.out.println(url1.matches(regex)); // 輸出:trueSystem.out.println(url2.matches(regex)); // 輸出:false}
}

三、正則表達式在Java中的應用

在 Java 中,可以使用 java.util.regex 包中的 PatternMatcher 類來處理正則表達式。

(一)匹配操作

import java.util.regex.*;public class RegexMatch {public static void main(String[] args) {String text = "Hello, World!";String regex = "World";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(text);if (matcher.find()) {System.out.println("匹配成功!");} else {System.out.println("匹配失敗!");}}
}

(二)替換操作

import java.util.regex.*;public class RegexReplace {public static void main(String[] args) {String text = "Hello, World!";String regex = "World";String replacement = "Java";String result = text.replaceAll(regex, replacement);System.out.println(result); // 輸出:Hello, Java!}
}

(三)分割操作

import java.util.regex.*;public class RegexSplit {public static void main(String[] args) {String text = "apple,banana,cherry";String regex = ",";String[] result = text.split(regex);for (String s : result) {System.out.println(s);}// 輸出:// apple// banana// cherry}
}

四、總結

正則表達式是一種強大的文本處理工具,通過使用特定的語法可以定義復雜的匹配模式。在 Java 中,可以使用 PatternMatcher 類來處理正則表達式,實現匹配、替換和分割等操作。掌握正則表達式的基本語法和常用示例,可以大大提高我們在文本處理和數據驗證方面的開發效率。希望本文的講解和示例對您有所幫助,如果您在使用正則表達式時有任何疑問,歡迎隨時交流探討!

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

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

相關文章

LoRa數傳、點對點通信、Mesh網絡、ZigBee以及圖傳技術的區別和特點

以下是LoRa數傳、點對點通信、Mesh網絡、ZigBee以及圖傳技術的區別和特點&#xff1a; 1.LoRa數傳? 特點&#xff1a;LoRa是一種基于擴頻技術的低功耗廣域網&#xff08;LPWAN&#xff09;通信技術&#xff0c;具有傳輸距離遠&#xff08;城市環境可達2-5公里&#xff0c;鄉村…

星越L_三角指示牌及危險警示燈使用

目錄 1.打開危險警告燈 2.取出反光背心穿上 3.取出指示牌 4.放置三角指示牌。 1.打開危險警示燈 2.取出反光背心穿上 3.取出指示牌

AI與人的智能,改變一生的思維模型【7】易得性偏差

目錄 **易得性偏差思維模型&#xff1a;大腦的「熱搜算法」與反操縱指南****病毒式定義&#xff1a;你的大腦正在被「熱搜」劫持****四大核心攻擊路徑與史詩級案例****1. 信息過載時代的「認知短路」****2. 媒體放大器的「恐怖濾鏡」****3. 個人經驗的「數據暴政」****4. 社交繭…

Jmeter的簡單使用

前置工作 確保java8 版本以上jmeter下載路徑&#xff08;選擇Binaries&#xff09;&#xff1a;https://jmeter.apache.org/download_jmeter.cgi直接解壓&#xff0c;找到bin下面的文件&#xff1a;jmeter.bat&#xff08;可選&#xff09;漢化&#xff0c;修改 jmeter.proper…

MyBatis源碼分析の配置文件解析

文章目錄 前言一、SqlSessionFactoryBuilder1.1、XMLConfigBuilder1.2、parse 二、mappers標簽的解析2.1、cacheElement2.1.1、緩存策略 2.2、buildStatementFromContext2.2.1、sql的解析 前言 本篇主要介紹MyBatis源碼中的配置文件解析部分。MyBatis是對于傳統JDBC的封裝&…

golang快速上手基礎語法

變量 第一種&#xff0c;指定變量類型&#xff0c;聲明后若不賦值&#xff0c;使用默認值0 package mainimport "fmt"func main() {var a int //第一種&#xff0c;指定變量類型&#xff0c;聲明后若不賦值&#xff0c;使用默認值0。fmt.Printf(" a %d\n"…

Java中的訪問修飾符有哪些

在 Java 中&#xff0c;訪問修飾符&#xff08;Access Modifiers&#xff09;用于控制類、方法、變量和構造器的訪問權限。Java 提供了四種訪問修飾符&#xff0c;分別是&#xff1a; publicprotecteddefault&#xff08;包私有&#xff0c;沒有顯式修飾符&#xff09;private…

【公務員考試】高效備考指南

高效備考指南&#xff1a;從計劃制定到心態調整的全面攻略 公務員考試競爭激烈&#xff0c;備考過程既需要科學規劃&#xff0c;也需要持之以恒的努力。結合多位高分考生的經驗與專業機構的指導&#xff0c;本文整理了一套系統化的備考策略&#xff0c;涵蓋目標設定、學習方法…

工程實踐:如何使用SU17無人機來實現室內巡檢任務

阿木實驗室最近發布了科研開發者版本的無人機SU17&#xff0c;該無人機上集成了四目視覺&#xff0c;三維激光雷達&#xff0c;云臺吊艙&#xff0c;高算力的機載計算機&#xff0c;是一個非常合適的平臺用于室內外巡檢場景。同時阿木實驗室維護了多個和無人機相關的開源項目。…

強大的CSS變量

在 CSS 中&#xff0c;變量&#xff08;Custom Properties&#xff09; 允許你定義可重用的值&#xff0c;方便在整個樣式表中使用和修改。CSS 變量的基本語法如下&#xff1a; 1. 定義 CSS 變量 CSS 變量通常在 :root 偽類中定義&#xff0c;以便它們可用于整個文檔&#xf…

藍橋杯嵌入式賽道復習筆記1(led點亮)

前言 基礎的文件創建&#xff0c;參賽資源代碼的導入&#xff0c;我就不說了&#xff0c;直接說CubeMX的配置以及代碼邏輯思路的書寫&#xff0c;在此我也預祝大家人人拿國獎 理論講解 原理圖簡介 1.由于存在PC8引腳到PC15引腳存在沖突&#xff0c;那么官方硬件給的解決方案…

Linux進程1.0--task_struct

1.硬件&#xff1a;馮諾依曼體系結構&#xff1a; 單個分析&#xff1a;、 數據流向&#xff1a;數據必須先進入輸入設備&#xff0c;再到存儲器&#xff0c;然后由存儲器給控制器&#xff0c;控制器收到以后進行相應的處理后&#xff0c;再傳回存儲器&#xff0c;存儲器最終傳…

本地部署Jina AI Reader:用Docker打造你的智能解析引擎

本地部署Jina AI Reader&#xff1a;用Docker打造你的智能解析引擎 &#x1f31f; 引言&#xff1a;為什么需要本地部署&#xff1f;&#x1f4cc; 場景應用圖譜&#x1f527; 部署指南&#xff08;Linux環境&#xff09;1. 環境準備2. Docker部署3. 驗證服務狀態 &#x1f680…

貪心算法簡介(greed)

前言&#xff1a; 貪心算法&#xff08;Greedy Algorithm&#xff09;是一種在每個決策階段都選擇當前最優解的算法策略&#xff0c;通過局部最優的累積來尋求全局最優解。其本質是"短視"策略&#xff0c;不回溯已做選擇。 什么是貪心、如何來理解貪心(個人對貪心的…

代碼隨想錄day17 二叉樹part05

654.最大二叉樹 給定一個不重復的整數數組 nums 。 最大二叉樹 可以用下面的算法從 nums 遞歸地構建: 創建一個根節點&#xff0c;其值為 nums 中的最大值。 遞歸地在最大值 左邊 的 子數組前綴上 構建左子樹。 遞歸地在最大值 右邊 的 子數組后綴上 構建右子樹。 返回 nums …

宇樹人形機器人開源模型

1. 下載源碼 https://github.com/unitreerobotics/unitree_ros.git2. 啟動Gazebo roslaunch h1_description gazebo.launch3. 仿真效果 H1 GO2 B2 Laikago Z1 4. VMware: vmw_ioctl_command error Invalid argument 這個錯誤通常出現在虛擬機環境中運行需要OpenGL支持的應用…

通過特征值和特征向量實現的圖像壓縮和特征提取

前文&#xff0c;我們在學習人工智能的線性代數基礎的時候&#xff0c;就了解到&#xff0c;矩陣在人工智能中被廣泛使用&#xff0c;接下來我們就從大家非常常見的圖像開始&#xff0c;深度理解矩陣在人工智能中的應用。有關線性代數基礎的文章可以看的我CSDN:人工智能中的線性…

藍橋杯2023年第十四屆省賽真題-整數刪除 暴力-->鏈表+小根堆

題目來自DOTCPP&#xff1a; 思路&#xff1a; ①每次找到數列中的最小值下標&#xff0c;然后用狀態數組st標記它&#xff0c;相當與刪除它&#xff0c;之后就不會訪問它。 ②對最小值下標左邊和右邊判斷一下&#xff0c;看有沒有數字&#xff0c;如果有就把最小值加到兩邊第…

springboot438-基于SpringBoot的數字化教學資源管理系統(源碼+數據庫+純前后端分離+部署講解等)

&#x1f495;&#x1f495;作者&#xff1a; 愛笑學姐 &#x1f495;&#x1f495;個人簡介&#xff1a;十年Java&#xff0c;Python美女程序員一枚&#xff0c;精通計算機專業前后端各類框架。 &#x1f495;&#x1f495;各類成品Java畢設 。javaweb&#xff0c;ssm&#xf…

藍橋杯刷題——第十五屆藍橋杯大賽軟件賽省賽C/C++ 大學 B 組

一、0握手問題 - 藍橋云課 算法代碼&#xff1a; #include <iostream> using namespace std; int main() {int sum0;for(int i49;i>7;i--)sumi;cout<<sum<<endl;return 0; } 直接暴力&#xff0c;題意很清晰&#xff0c;累加即可。 二、0小球反彈 - 藍…