JAVA中正則表達式的入門與使用

JAVA中正則表達式的入門與使用

一,基礎概念

正則表達式(Regex) 用于匹配字符串中的特定模式,Java 中通過 java.util.regex 包實現,核心類為:
Pattern:編譯后的正則表達式對象。
Matcher:用于在輸入字符串中查找匹配項。

二,如何快速入門

1,編譯正則表達式

Pattern pattern = Pattern.compile("你的正則表達式");

2,創建匹配器

Matcher matcher = pattern.matcher("要匹配的字符串");

3,執行匹配

常用方法:

  • find():查找下一個匹配項。
  • matches():檢查整個字符串是否匹配。
  • group():獲取匹配的子字符串。

三,核心語法

1,基本元字符

元字符含義示例
.匹配任意單個字符(換行除外)“a.c” 匹配 “abc”, “a2c”
^匹配字符串開頭“^hello” 匹配 “hello…”
$匹配字符串結尾“world$” 匹配 “…world”
*匹配前面的元素 0次或多次“a*” 匹配 “”, “a”, “aaa”
+匹配前面的元素 1次或多次“a+” 匹配 “a”, “aaa”
?匹配前面的元素 0次或1次“a?” 匹配 “”, “a”
[ ]匹配字符集中的任意一個字符[abc] 匹配 “a”, “b”, “c”
|邏輯或(匹配左側或右側)“cat|dog” 匹配 “cat"或"dog”

2,量詞與分組

  • 量詞:{n}(n次)、{n,}(至少n次)、{n,m}(n到m次) 示例:“a{2}” 匹配 “aa”。
  • 分組:(…) 將子表達式分組,可用于捕獲或引用。 示例:“(\d{3})-(\d{4})” 捕獲電話號碼的區號和號碼。

3,預定義字符類

字符類含義
\d匹配數字(0-9)
\D匹配非數字
\w匹配字母、數字、下劃線
\W匹配非單詞字符
\s匹配空白字符(空格、換行)
\S匹配非空白字符

四、場景應用

1,驗證郵箱格式

String email = "user@example.com";
Pattern pattern = Pattern.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$");
Matcher matcher = pattern.matcher(email);
boolean isValid = matcher.matches(); // true 或 false

2,提取電話號碼

String text = "電話:138-1234-5678";
Pattern pattern = Pattern.compile("\\d{3}-\\d{4}-\\d{4}");
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {System.out.println(matcher.group()); // 輸出 "138-1234-5678"
}

3,替換字符串

String text = "價格:$99.99";
Pattern pattern = Pattern.compile("\\$\\d+\\.\\d{2}");
Matcher matcher = pattern.matcher(text);
String replaced = matcher.replaceAll("¥100.00"); // 替換為 ¥100.00

4, 分割字符串

String csv = "apple,banana,cherry";
String[] fruits = csv.split(","); // 輸出 ["apple", "banana", "cherry"]

五、正則使用tips

1,轉義字符

在 Java 字符串中,反斜杠 \ 需要轉義為 \。
示例:正則表達式 \d 在代碼中寫為 “\d”

2,性能優化

頻繁使用正則時,建議預編譯 Pattern 對象:

   private static final Pattern EMAIL_PATTERN = Pattern.compile("...");

3,邊界匹配

使用 ^ 和 $ 確保匹配整個字符串,而非子串:
例如"^start" 匹配以 “start” 開頭的字符串,“end$” 匹配以 “end” 結尾的字符串。

4,分組捕獲

使用 () 分組,通過 group(int) 獲取子匹配結果:

   Pattern pattern = Pattern.compile("(\\d{3})-(\\d{4})");Matcher matcher = pattern.matcher("123-4567");System.out.println(matcher.group(1)); // 輸出 "123"

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

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

相關文章

Prompt_Engineering提示詞工程(一)

一、Prompt(提示詞) Prompt(提示詞)是給AI模型交互文本片段,用于指導模型生成符合預期輸出結果,提示詞的目的是為模型提供一個上下文的任務,以便模型能夠更準確地理解用戶的意圖,并…

【設計模式】面向對象開發學習OOPC

PLOOC-裸機思維 PLOOC-git OOPC精要——撩開“對象”的神秘面紗 C/C面向對象編程之封裝-KK 面向過程,本質是“順序,循環,分支”面向對象,本質是“繼承,封裝,多態”參考的書籍:《UMLOOPC嵌入式…

軟考高級--案例分析

架構風格 重點 交互方式數據結構控制結構擴展方法 分類 管道-過濾器風格 數據流 數據倉儲風格 星型結構以數據為中心,其他構件圍繞數據進行交互 企業服務總線esb 定義 以一個服務總線充當中間件的角色,把各方服務對接起來,所有服務…

01_背包問題

package org.josh; import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); int n scanner.nextInt(); // 物品數量 long w scanner.nextLong(); // 背包容量,使用long防止溢出 int[] v …

esp32-idf Linux 環境安裝教程

一、提前說明 1. 系統環境 Ubuntu22.04 2. 適配芯片 ESP32S3 3. idf版本 v5.4.1(截止2025年4月13日為最新版本) 二、安裝步驟 1. 安裝前置依賴 sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev l…

JavaScript 輸入輸出語句

在JavaScript中,輸入和輸出是與用戶交互的基礎。無論是從用戶那里獲取信息還是向用戶展示結果,正確使用輸入輸出語句都是至關重要的。本文將詳細介紹JavaScript中常用的輸入輸出方法及其應用場景。 一、輸出語句 (一)console.lo…

TCP 如何在網絡 “江湖” 立威建交?

一、特點: (一)面向連接 在進行數據傳輸之前,TCP 需要在發送方和接收方之間建立一條邏輯連接。這一過程類似于打電話,雙方在通話前需要先撥號建立連接。建立連接的過程通過三次握手來完成,確保通信雙方都…

文章記單詞 | 第29篇(六級)

一,單詞釋義 AI /?e? ?a?/ abbr. 人工智能(Artificial Intelligence)inventory /??nv?ntri/ n. 存貨清單;財產清單;庫存貨物;存貨;v. 編制目錄;開列清單;盤存cha…

【C#】.NET 8適配器模式實戰:用C#實現高可用系統集成與接口橋接藝術

系統集成挑戰與適配器模式的價值 當需要整合不同架構或API的系統時,接口兼容性問題往往成為攔路虎。**適配器設計模式(Adapter Pattern)**通過轉換接口形態,完美解決這種不兼容性問題。本文將通過C# .NET 8實戰演示適配器模式的基…

Nginx基礎到全面掌握高性能Web服務核心

目錄 前言 第一部分:Nginx基礎入門 1.1 什么是Nginx? 1.2 Nginx的典型應用場景 第二部分:Nginx安裝與部署 2.1 在不同操作系統上安裝Nginx 2.2 驗證安裝與基本操作 第三部分:Nginx配置詳解 3.1 核心配置文件解析 3.2 虛…

C語言中while的相關題目

一、題目引入 以下程序中,while循環的循環次數是多少次? 二、代碼分析 首先要明確的一點 while循環是當循環條件為真 就會一直循環 不會停止 while中i是小于10的 說明i可以取到0 1 2 3 4 5 6 7 8 9 進入第一個if判斷i小于1為真時執行continue i0是為真的 執行continue 后…

idea 創建 maven-scala項目

文章目錄 idea 創建 maven-scala項目1、創建普通maven項目并且配置pom.xml文件2、修改項目結構1)創建scala目錄并標記成【源目錄】2)導入scala環境3)測試環境 idea 創建 maven-scala項目 1、創建普通maven項目并且配置pom.xml文件 maven依賴…

微服務之間調用外鍵“翻譯”的方法概述

寫在前面的話&#xff1a;減少strean流操作&#xff0c;減少多層嵌套for循環。使用普通for循環和map的方式進行轉換&#xff0c; 第一步查詢數據 List<Student> findList studentDao.findList(findMap); 第二步準備遍歷和賦值 if(CollectionUtil.isNotEmpty(findLis…

Spring Boot 中集成 Disruptor_高性能事件處理框架

1. 引言 1.1 什么是 Disruptor Disruptor 是一個高性能的事件處理框架,廣泛應用于金融交易系統、日志記錄、消息隊列等領域。它通過無鎖機制和環形緩沖區(Ring Buffer)實現高效的事件處理,具有極低的延遲和高吞吐量的特點。 1.2 為什么使用 Disruptor 高性能:通過無鎖機…

Java中equals與 “==” 的區別

首先我們要掌握基本數據類型和引用類型的概念 基本數據類型&#xff1a; byte&#xff0c;short&#xff0c;int,long,float,double,boolean,char 基本的八大數據類型都各自封裝著包裝類&#xff0c;提供了更多的方法&#xff0c;并且都是引言類型 引用類型&#xff1a; 引…

青少年編程與數學 02-016 Python數據結構與算法 11課題、分治

青少年編程與數學 02-016 Python數據結構與算法 11課題、分治 一、分治算法的基本原理二、分治算法的實現步驟快速排序算法代碼示例&#xff08;Python&#xff09; 三、分治算法的復雜度分析四、分治算法的優缺點優點&#xff1a;缺點&#xff1a; 五、分治算法的應用&#xf…

RFID技術概覽

一、RFID技術定義 RFID&#xff08;Radio Frequency Identification&#xff0c;射頻識別&#xff09; 是一種通過無線電信號識別目標對象并獲取相關數據的非接觸式自動識別技術。它利用射頻信號的空間耦合&#xff08;電感或電磁耦合&#xff09;實現無物理接觸的信息傳遞與目…

【C++游戲引擎開發】第13篇:光照模型與Phong基礎實現

一、Phong模型數學原理 1.1 光照疊加公式 L = k a I a + k d I d max ? ( 0 , n ? l ) + k s I s max ? ( 0 , r ? v ) α L = k_a I_a + k_d I_d \max(0, \mathbf{n} \cdot \mathbf{l}) + k_s I_s \max(0, \mathbf{r} \cdot \mathbf{v})^\alpha L=ka?Ia?+kd?Id?max(0…

C語言中數組與指針:差異、應用及深度剖析

在C語言編程領域中&#xff0c;數組和指針是極為重要的概念&#xff0c;它們各自扮演著獨特的角色&#xff0c;既有著緊密的聯系&#xff0c;又存在顯著的區別。深入理解它們的作用與差異&#xff0c;是掌握C語言編程的關鍵。 數組&#xff1a;數據的有序集合 數組是一組具有相…

【AI大模型】大模型RAG技術Langchain4j 核心組件深入詳解

目錄 一、前言 二、Langchain4j概述 2.1 Langchain4j 是什么 2.2 Langchain4j 主要特點 2.3 Langchain4j 核心組件 2.4 Langchain4j 核心優勢 三、Langchanin4j組件應用實戰 3.1 前置準備 3.1.1 導入如下依賴 3.1.2 獲取apikey 3.1.3 獲取官方文檔 3.2 聊天組件 3.…