Java常用正則表達式及使用方法

在 Java 中,Pattern?和?Matcher?類是?java.util.regex?包的核心,用于處理正則表達式。

Pattern?類

Pattern?類表示編譯后的正則表達式,它提供了一種將正則表達式字符串編譯成可執行對象的方式,以便后續用于匹配操作。

常用方法
  1. compile(String regex):這是一個靜態方法,用于將給定的正則表達式字符串編譯為?Pattern?對象。
  2. matcher(CharSequence input):創建一個?Matcher?對象,該對象將使用編譯好的正則表達式對指定的輸入字符串進行匹配操作。
  3. split(CharSequence input):根據正則表達式將輸入的字符串分割成字符串數組。
示例代碼
import java.util.regex.Pattern;public class PatternExample {public static void main(String[] args) {// 編譯正則表達式Pattern pattern = Pattern.compile("\\d+");// 使用 split 方法分割字符串String input = "abc123def456ghi";String[] parts = pattern.split(input);for (String part : parts) {System.out.println(part);}}
}

在上述代碼中,首先使用?Pattern.compile("\\d+")?編譯了一個匹配一個或多個數字的正則表達式。然后使用?split?方法將輸入字符串按照數字進行分割,最后打印分割后的結果。

Matcher?類

Matcher?類用于對輸入字符串執行匹配操作,它提供了多種方法來查找、替換和提取匹配的子字符串。

常用方法
  1. find():嘗試在輸入字符串中查找下一個匹配的子字符串,如果找到則返回?true,否則返回?false
  2. matches():嘗試將整個輸入字符串與正則表達式進行匹配,如果完全匹配則返回?true,否則返回?false
  3. group():返回上一次匹配操作所匹配的子字符串。
  4. replaceAll(String replacement):將輸入字符串中所有匹配的子字符串替換為指定的字符串。
示例代碼
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class MatcherExample {public static void main(String[] args) {// 編譯正則表達式Pattern pattern = Pattern.compile("\\d+");// 創建 Matcher 對象Matcher matcher = pattern.matcher("abc123def456ghi");// 使用 find 方法查找匹配的子字符串while (matcher.find()) {System.out.println("找到匹配項: " + matcher.group());}// 使用 replaceAll 方法替換匹配的子字符串String result = matcher.replaceAll("X");System.out.println("替換后的字符串: " + result);}
}

在上述代碼中,首先編譯了一個匹配一個或多個數字的正則表達式,并創建了一個?Matcher?對象。然后使用?find?方法在輸入字符串中查找所有匹配的數字,并打印出來。最后使用?replaceAll?方法將所有匹配的數字替換為字符?X,并打印替換后的字符串。

相關網站

  • 正則表達式在線測試工具:Regex101,可以在線測試和調試正則表達式,同時支持多種編程語言的語法。

正則表達式

正則表達式是用于匹配、查找和替換文本模式的強大工具,在許多編程語言和文本處理工具中都有廣泛應用。以下是一些常用的正則表達式及其用途:

1. 匹配數字

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class DigitMatching {public static void main(String[] args) {String input = "abc123";// 匹配單個數字Pattern singleDigitPattern = Pattern.compile("\\d");Matcher singleDigitMatcher = singleDigitPattern.matcher(input);while (singleDigitMatcher.find()) {System.out.println("單個數字匹配結果: " + singleDigitMatcher.group());}// 匹配多個數字Pattern multipleDigitPattern = Pattern.compile("\\d+");Matcher multipleDigitMatcher = multipleDigitPattern.matcher(input);while (multipleDigitMatcher.find()) {System.out.println("多個數字匹配結果: " + multipleDigitMatcher.group());}}
}

2. 匹配字母

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class LetterMatching {public static void main(String[] args) {String input = "ABCabc";// 匹配單個小寫字母Pattern lowerCasePattern = Pattern.compile("[a-z]");Matcher lowerCaseMatcher = lowerCasePattern.matcher(input);while (lowerCaseMatcher.find()) {System.out.println("單個小寫字母匹配結果: " + lowerCaseMatcher.group());}// 匹配單個大寫字母Pattern upperCasePattern = Pattern.compile("[A-Z]");Matcher upperCaseMatcher = upperCasePattern.matcher(input);while (upperTypeCaseMatcher.find()) {System.out.println("單個大寫字母匹配結果: " + upperCaseMatcher.group());}// 匹配單個字母(不區分大小寫)Pattern anyCasePattern = Pattern.compile("[a-zA-Z]");Matcher anyCaseMatcher = anyCasePattern.matcher(input);while (anyCaseMatcher.find()) {System.out.println("單個字母(不區分大小寫)匹配結果: " + anyCaseMatcher.group());}}
}

3. 匹配字母和數字

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class AlphanumericMatching {public static void main(String[] args) {String input = "abc123@#$";// 匹配單個字母或數字Pattern singleAlphanumericPattern = Pattern.compile("[a-zA-Z0-9]");Matcher singleAlphanumericMatcher = singleAlphanumericPattern.matcher(input);while (singleAlphanumericMatcher.find()) {System.out.println("單個字母或數字匹配結果: " + singleAlphanumericMatcher.group());}// 匹配多個字母或數字Pattern multipleAlphanumericPattern = Pattern.compile("[a-zA-Z0-9]+");Matcher multipleAlphanumericMatcher = multipleAlphanumericPattern.matcher(input);while (multipleAlphanumericMatcher.find()) {System.out.println("多個字母或數字匹配結果: " + multipleAlphanumericMatcher.group());}}
}

4. 匹配空白字符

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class WhitespaceMatching {public static void main(String[] args) {String input = "abc  123";// 匹配單個空白字符Pattern singleWhitespacePattern = Pattern.compile("\\s");Matcher singleWhitespaceMatcher = singleWhitespacePattern.matcher(input);while (singleWhitespaceMatcher.find()) {System.out.println("單個空白字符匹配結果: " + singleWhitespaceMatcher.group());}// 匹配多個空白字符Pattern multipleWhitespacePattern = Pattern.compile("\\s+");Matcher multipleWhitespaceMatcher = multipleWhitespacePattern.matcher(input);while (multipleWhitespaceMatcher.find()) {System.out.println("多個空白字符匹配結果: " + multipleWhitespaceMatcher.group());}}
}

5. 匹配郵箱地址

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class EmailMatching {public static void main(String[] args) {String email = "test@example.com";String patternStr = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";Pattern pattern = Pattern.compile(patternStr);Matcher matcher = pattern.matcher(email);if (matcher.matches()) {System.out.println("有效郵箱地址");} else {System.out.println("無效郵箱地址");}}
}

6. 匹配手機號碼

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class PhoneNumberMatching {public static void main(String[] args) {String phone = "13800138000";String patternStr = "^1[3-9]\\d{9}$";Pattern pattern = Pattern.compile(patternStr);Matcher matcher = pattern.matcher(phone);if (matcher.matches()) {System.out.println("有效手機號碼");} else {System.out.println("無效手機號碼");}}
}
關于匹配郵箱詳解:

"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";符號的含義

1. 定界符

  • ^:表示匹配字符串的開始位置。在該正則表達式中,它確保匹配是從字符串的起始處開始的,即郵箱地址的起始部分必須符合后續的規則。
  • $:表示匹配字符串的結束位置。意味著整個字符串必須完全匹配正則表達式所定義的模式,直到字符串結束。結合?^?和?$?使用,能保證整個字符串是一個完整的郵箱地址,而不是包含在其他文本中的部分郵箱地址。

2. 用戶名部分:[a-zA-Z0-9._%+-]+

  • [a-zA-Z0-9._%+-]:這是一個字符類,它定義了一組允許的字符。
    • a-zA-Z:表示所有的大小寫英文字母,即?A?到?Z?和?a?到?z
    • 0-9:表示所有的數字,即?0?到?9
    • ._%+-:這些是特定的符號,在郵箱用戶名中是允許出現的。
  • +:是一個量詞,表示前面的字符類(即?[a-zA-Z0-9._%+-])必須出現一次或多次。也就是說,郵箱用戶名至少要有一個字符,并且只能由上述定義的字符組成。

3.?@

這是郵箱地址中用于分隔用戶名和域名的固定符號,在正則表達式中直接使用該字符來匹配實際郵箱地址中的?@?符號。

4. 域名部分:[a-zA-Z0-9.-]+

  • [a-zA-Z0-9.-]:同樣是一個字符類,允許的字符包括大小寫英文字母、數字、點號?.?和連字符?-。在域名中,這些字符是常見的組成部分。
  • +:表示前面的字符類必須出現一次或多次,即域名部分至少要有一個字符,且由上述定義的字符組成。

5.?\\.

  • 點號?.?在正則表達式中有特殊含義,表示匹配任意單個字符。為了匹配實際的點號(即郵箱地址中的域名分隔符),需要使用反斜杠?\?進行轉義。由于在 Java 字符串中,反斜杠本身也需要轉義,所以寫成?\\.

6. 頂級域名部分:[a-zA-Z]{2,}

  • [a-zA-Z]:表示所有的大小寫英文字母。
  • {2,}:是一個量詞,表示前面的字符類(即?[a-zA-Z])必須出現至少 2 次。這是因為常見的頂級域名(如?.com.org.cn?等)通常至少由兩個字母組成。

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

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

相關文章

車載軟件架構 --- 駕駛員不感知的控制器軟件運行

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 周末洗了一個澡,換了一身衣服,出了門卻不知道去哪兒,不知道去找誰,漫無目的走著,大概這就是成年人最深的孤獨吧! 舊人不知我近況,新人不知我過…

深度學習3.5 圖像分類數據集

%matplotlib inline import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2l代碼執行流程圖 #mermaid-svg-WWhBmQvijswiICpI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-…

Kotlin集合全解析:List和Map高頻操作手冊

Kotlin 中 Map 和 List 常用功能總結 List 常用功能 創建 List val immutableList listOf(1, 2, 3) // 不可變列表 val mutableList mutableListOf("a", "b", "c") // 可變列表 val emptyList emptyList<String>() // 空列表基本…

Yocto項目實戰教程-第7章定制鏡像菜譜與內核菜譜-7.2小節-定制應用程序

&#x1f50d; B站相應的視頻教程&#xff1a; &#x1f4cc; Yocto項目實戰教程-第7章-定制鏡像菜譜與內核菜譜 記得三連&#xff0c;標為原始粉絲,感謝大神支持。 在嵌入式Linux系統開發中&#xff0c;定制專屬應用程序往往是最貼近產品交付的那一環。而Yocto項目&#xff0c…

【圖像輪廓特征查找】圖像處理(OpenCV) -part8

17 圖像輪廓特征查找 圖像輪廓特征查找其實就是他的外接輪廓。 應用&#xff1a; 圖像分割 形狀分析 物體檢測與識別 根據輪廓點進行&#xff0c;所以要先找到輪廓。 先灰度化、二值化。目標物體白色&#xff0c;非目標物體黑色&#xff0c;選擇合適的兒值化方式。 有了輪…

C# 的 字符串插值($) 和 逐字字符串(@) 功能

這段代碼使用了 C# 的 字符串插值&#xff08;$&#xff09; 和 逐字字符串&#xff08;&#xff09; 功能&#xff0c;并在 SQL 語句中動態拼接變量。下面詳細解釋它們的用法&#xff1a; 1. $&#xff08;字符串插值&#xff09; $ 是 C# 的 字符串插值 符號&#xff0c;允許…

mockMvc構建web單元測試學習筆記

web應用本來需要依靠tomcat這個環境運行 現在用mockMvc是為了模擬這個web環境&#xff0c;簡化測試 什么是mock(模擬) 模擬對象---mock object是以可控方式模擬真實對象行為的假對象&#xff0c;通過模擬輸入數據&#xff0c;驗證程序達到預期結果 為什么使用mock對象 因為…

6.7.圖的深度優先遍歷(英文縮寫DFS)

樹是特殊的圖&#xff0c;沒有回路的圖就是樹 BFS與DFS的區別在于&#xff0c;BFS使用了隊列&#xff0c;DFS使用了棧 一.深度優先遍歷&#xff1a; 1.樹的深度優先遍歷&#xff1a; 樹的深度優先遍歷分為先根遍歷和后根遍歷。 以樹的先根遍歷為例&#xff1a; 上述圖片里…

VOS3000內存滿了怎么刪除,錄音格式如何轉換呢

一、清理VOS3000內存&#xff08;刪除舊錄音文件&#xff09; 定位錄音存儲目錄 通常錄音文件存儲在以下路徑&#xff08;以實際配置為準&#xff09;&#xff1a; bash 復制 下載 /usr/local/vos/record # 默認錄音目錄 /var/log/vos/logs # 系統日志目錄&#xff08;…

【圖問答】DeepSeek-VL 論文閱讀筆記

《DeepSeek-VL: Towards Real-World Vision-Language Understanding》 1. 摘要/引言 基于圖片問答&#xff08;Visual Question Answering&#xff0c;VQA&#xff09;的任務 2. 模型結構 和 三段式訓練 1&#xff09;使用 SigLIP 和 SAM 作為混合的vision encoder&#xf…

MATLAB - 模型預測控制(MPC)使用 ADMM 求解器四分之一汽車懸架懸掛系統動力學控制

系列文章目錄 目錄 系列文章目錄 前言 一、四分車懸架模型 二、道路干擾剖面 三、設計模型預測控制器 四、設置優化求解器 五、輔助函數 前言 本例展示了如何為四分之一汽車懸架系統設計模型預測控制器 (MPC)&#xff0c;采用乘法交替方向法 (ADMM) 求解器來控制主動懸架…

基于多模態融合算法的航空武器毀傷評估技術方案

基于多模態融合算法的航空武器毀傷評估技術方案 1. 引言 航空武器毀傷評估(Damage Assessment, DA)是現代戰爭中的關鍵環節,直接影響后續作戰決策。傳統的人工評估方式效率低、主觀性強,且在高強度戰場環境下難以實時完成。因此,本研究提出一種基于多模態融合算法的自動…

LeetCode算法題(Go語言實現)_49

題目 給定整數數組 nums 和整數 k&#xff0c;請返回數組中第 k 個最大的元素。 請注意&#xff0c;你需要找的是數組排序后的第 k 個最大的元素&#xff0c;而不是第 k 個不同的元素。 你必須設計并實現時間復雜度為 O(n) 的算法解決此問題。 一、代碼實現&#xff08;快速選擇…

【HCIA】簡易的兩個VLAN分別使用DHCP分配IP

前言 之前我們通過 靜態ip地址實現了Vlan間通信 &#xff0c;現在我們添加一個常用的DHCP功能。 文章目錄 前言1. 配置交換機2. 接口模式3. 全局模式后記修改記錄 1. 配置交換機 首先&#xff0c;使用DHCP&#xff0c;需要先啟動DHCP服務&#xff1a; [Huawei]dhcp enable I…

【技術派后端篇】技術派通用敏感詞替換:原理、實現與應用

在當今互聯網環境下&#xff0c;數據脫敏對于國內的互聯網企業而言已經成為一項標配。這不僅是為了滿足合規性要求&#xff0c;更是保障用戶信息安全和企業聲譽的重要舉措。本文將深入探討技術派中實現數據脫敏的關鍵技術——通用敏感詞替換&#xff0c;從算法原理到具體實現&a…

Android RK356X TVSettings USB調試開關

Android RK356X TVSettings USB調試開關 平臺概述操作-打開USB調試實現源碼補充說明 平臺 RK3568 Android 11 概述 RK3568 是瑞芯微&#xff08;Rockchip&#xff09;推出的一款高性能處理器&#xff0c;支持 USB OTG&#xff08;On-The-Go&#xff09;和 USB Host 功能。US…

Microsoft Edge for linux debian

下載地址 https://www.microsoft.com/en-us/edge/download?formMA13FJ 安裝 # 下載安裝包 wget https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_135.0.3179.85-1_amd64.deb?brandM102 # 安裝 sudo dpkg -i microsoft…

typedef MVS_API CLISTDEF0IDX(ViewScore, IIndex) ViewScoreArr;

查找 MVS_API 定義 我們沒有在 List.h 文件中找到 MVS_API 的定義。MVS_API 很可能在 MVS 庫的其他地方定義。一般來說&#xff0c;MVS_API 是控制 OpenMVS 庫導入導出的宏&#xff0c;通常會出現在 MVS 的頭文件中。為了回答這個問題&#xff0c;我可以提供 MVS 代碼中常見的…

5.4/Q1,GBD數據庫最新文章解讀

文章題目&#xff1a;The global burden of high BMI among adolescents between 1990 and 2021 DOI&#xff1a;10.1038/s43856-025-00838-2 中文標題&#xff1a;1990 年至 2021 年青少年高 BMI 的全球負擔 發表雜志&#xff1a;Commun Med 影響因子&#xff1a;1區&#xff…

【形式化驗證基礎】活躍屬性Liveness Property和安全性質(Safety Property)介紹

文章目錄 一、Liveness Property1、概念介紹2、形式化定義二、Safety Property1. 定義回顧2. 核心概念解析3. 為什么強調“有限前綴”4. 示例說明4.1 示例1:交通信號燈系統4.2 示例2:銀行賬戶管理系統5. 實際應用的意義三. 總結一、Liveness Property 1、概念介紹 在系統的…