[Java 基礎]正則表達式

正則表達式是一種強大的文本模式匹配工具,它使用一種特殊的語法來描述要搜索或操作的字符串模式。在 Java 中,我們可以使用 java.util.regex包提供的類來處理正則表達式。

:::color3
正則表達式不止 Java 語言提供了相應的功能,很多其他語言都提供了對其的支撐,比如:Python、Javascript

:::

正則表達式

簡單來說,正則表達式就是一個由特殊字符(稱為元字符)和普通字符組成的字符串,用來定義一個搜索模式。這個模式可以用來匹配、查找、替換符合特定規則的文本。

例如,模式 \d+ 可以匹配一個或多個數字,模式 [a-z]+ 可以匹配一個或多個小寫字母。

常用的元字符:

比如,這是一個匹配大多數郵箱地址的正則表達式:

^[\w\-\.]+@([\w\-]+\.)+[\w\-]{2,4}$
  1. ^
  • 匹配輸入的 開始位置
  1. [\w\-\.]+
  • 匹配郵箱的 用戶名部分(@ 前面)。
  • [\w\-\.] 表示可以是以下任意一個字符:
    • \w:等價于 [a-zA-Z0-9_](字母、數字或下劃線)
    • \-:減號(-
    • \.:點號(.
  • + 表示上面的字符可以重復出現 1 次或多次。
  1. @
  • 郵箱地址中的 @ 符號,用作用戶名和域名的分隔。
  1. ([\w\-]+\.)+
  • 匹配域名部分中前面的部分(例如:mail.google.)。
  • [\w\-]+:一個或多個字母、數字、下劃線或減號。
  • \.:一個點號。
  • (...) +:這個結構可以出現一次或多次,表示可以匹配像 abc.mail.google. 等。
  1. [\w\-]{2,4}
  • 匹配最后的頂級域名(如 comnetorg)。
  • 范圍 {2,4} 表示:2 到 4 個字符之間。
  • 允許的字符:字母、數字、下劃線、減號。
  1. $
  • 匹配輸入的 結束位置

可以在這個網站方便的看到正則表達式的匹配情況:

https://www.mklab.cn/utils/regex

Java 中使用正則表達式

Java 中使用正則表達式的步驟

  1. 創建 **Pattern** 對象: 使用 Pattern.compile(String regex) 編譯正則表達式。
  2. 創建 **Matcher** 對象: 使用 pattern.matcher(CharSequence input)Pattern 對象應用于輸入字符串。
  3. 進行匹配操作: 使用 Matcher 對象的方法進行查找、匹配和替換等操作。

比如,我們使用上面的郵箱的正則表達式判斷字符串是不是一個郵箱地址:

Pattern pattern = Pattern.compile("[\\w\\-\\.]+@([\\w\\-]+\\.)+[\\w\\-]{2,4}");
Matcher matcher1 = pattern.matcher("111111111@qq.com");
System.out.println(matcher1.matches()); // trueMatcher matcher2 = pattern.matcher("123ab");
System.out.println(matcher2.matches()); // false

:::color3
在 Java 字符串中,反斜杠 \ 是一個特殊字符,用于轉義。因此,在正則表達式中要表示字面意義的反斜杠,需要使用雙反斜杠 \\。例如,要匹配一個點號 .,正則表達式應該是 \.,但在 Java 字符串中需要寫成 "\\."

:::

Matcher 類的常用方法:

方法名作用
matches()嘗試將整個輸入序列與該模式匹配。只有當整個輸入序列完全匹配模式時才返回 true
find()嘗試查找與該模式匹配的輸入序列的下一個子序列。如果找到匹配項,則返回 true。可以多次調用 find() 來查找所有匹配項
group()返回由上一次匹配操作所匹配的子序列。如果匹配成功,group(0) 返回整個匹配的子串。如果正則表達式中包含分組(用括號 () 包圍),可以使用 group(n) 來獲取第 n 個分組匹配的子串(索引從 1 開始)
start()返回上一次匹配的起始索引
end()返回上一次匹配的結束索引(不包含)
replaceAll(String replacement)將輸入序列中所有匹配該模式的子序列替換為指定的 replacement 字符串。返回一個新的字符串
replaceFirst(String replacement)將輸入序列中第一個匹配該模式的子序列替換為指定的 replacement 字符串。返回一個新的字符串

下面是一個使用正則表達式從字符串中統計 Hello 出現次數的例子,每次還打印了找到的 Hello 在字符串中的開始下標(包含)和結束下標(不包含):

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexMatches {public static void main( String[] args ){final String REGEX = "\\bHello\\b";final String INPUT = "Hello world,Hello Tomcat,Hello Java";Pattern p = Pattern.compile(REGEX);Matcher m = p.matcher(INPUT); // 獲取 matcher 對象int count = 0;while (m.find()) {count++;System.out.println("Match number " + count);System.out.println("start(): " + m.start());System.out.println("end(): " + m.end());}}
}

String 類提供了一些方便的方法,入參可以使用正則表達式:

方法名作用
matches(String regex)判斷字符串是否完全匹配給定的正則表達式
split(String regex)根據給定的正則表達式將字符串分割成字符串數組
replaceAll(String regex, String replacement)將字符串中所有匹配給定的正則表達式的子字符串替換為指定的 replacement 字符串
replaceFirst(String regex, String replacement)將字符串中第一個匹配給定的正則表達式的子字符串替換為指定的 replacement 字符串

下面是使用 String 類的 replaceAll 方法將所有的數字替換為 * 的例子:

String text = "Hello 123 World 456";
String result = text.replaceAll("\\d+", "***"); // Hello *** World ***

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

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

相關文章

ArcGIS安裝出現1606錯誤解決辦法

問題背景: 由于最近Arcgis10.2打是有些功能不正常退出,比如arctoolbox中的,table to excel 功能,只要一點擊,arcgis就報錯退出,平常在使用過程中,也經常出現一些莫名其妙的崩潰現象&#xff0c…

wpf 解決DataGridTemplateColumn中width綁定失效問題

感謝酪酪烤奶 提供的Solution 文章目錄 感謝酪酪烤奶 提供的Solution使用示例示例代碼分析各類交互流程 WPF DataGrid 列寬綁定機制分析整體架構數據流分析1. ViewModel到Slider的綁定2. ViewModel到DataGrid列的綁定a. 綁定代理(BindingProxy)b. 列寬綁定c. 數據流 關鍵機制詳…

語音轉文本ASR、文本轉語音TTS

ASR Automatic Speech Recognition,語音轉文本。 技術難點: 聲學多樣性 口音、方言、語速、背景噪聲會影響識別準確性;多人對話場景(如會議錄音)需要區分說話人并分離語音。 語言模型適配 專業術語或網絡新詞需要動…

通用embedding模型和通用reranker模型,觀測調研

調研Qwen3-Embedding和Qwen3-Reranker 現在有一個的問答庫,包括150個QA-pair,用10個query去同時檢索問答庫的300個questionanswer Embedding模型,query-question的匹配分數 普遍高于 query-answer的匹配分數。比如對于10個query&#xff0c…

基于YOLOv8+Deepface的人臉檢測與識別系統

摘要 人臉檢測與識別系統是一個集成了先進計算機視覺技術的應用,通過深度學習模型實現人臉檢測、識別和管理功能。系統采用雙模式架構: ??注冊模式??:檢測新人臉并添加到數據庫??刪除模式??:識別數據庫中的人臉并移除匹…

Grdle版本與Android Gradle Plugin版本, Android Studio對應關系

Grdle版本與Android Gradle Plugin版本, Android Studio對應關系 各個 Android Gradle 插件版本所需的 Gradle 版本: https://developer.android.com/build/releases/gradle-plugin?hlzh-cn Maven上發布的Android Gradle Plugin(AGP&#x…

用c語言實現簡易c語言掃雷游戲

void test(void) {int input 0;do{menu();printf("請選擇: >");scanf("%d", &input);switch (input){menu();case 1:printf("掃雷\n");game();break;case 2:printf("退出游戲\n");break;default:printf("輸入…

系統辨識的研究生水平讀書報告期末作業參考

這是一份關于系統辨識的研究生水平讀書報告,內容系統完整、邏輯性強,并深入探討了理論、方法與實際應用。報告字數超過6000字 從理論到實踐:系統辨識的核心思想、方法論與前沿挑戰 摘要 系統辨識作為連接理論模型與客觀世界的橋梁&#xff…

開源、免費、美觀的 Vue 后臺管理系統模板

隨著前端技術的不斷發展,Vue.js 憑借其輕量、高效、易上手的特性,成為國內外開發者最喜愛的前端框架之一。在構建后臺管理系統時,Vue 提供了以下優勢: 響應式數據綁定:讓頁面和數據保持同步,開發效率高。 …

適合 Acrobat DC 文件類型解析

文件類型 (File Type)ProgID (Continuous)ProgID (Classic)主要用途.pdfAcroExch.Document.DCAcroExch.Document.20XX (版本特定)Adobe PDF文檔格式,用于存儲文檔內容和格式.pdfxmlAcroExch.pdfxmlAcroExch.pdfxmlPDF與XML結合的格式,可能用于結構化數據…

C/C++數據結構之漫談

概述 在當今的數字化時代,無論是刷短視頻、社交聊天,還是使用導航軟件、網絡購物,背后都離不開計算機技術的支持。但你是否想過:為什么同樣的功能,有的軟件運行得飛快,有的卻嚴重卡頓,半天沒有響…

4步使用 vue3 路由

路由的基本使用步驟分為以下4步 第一步&#xff1a;定義路由組件&#xff1a;略 第二步&#xff1a;定義路由鏈接和路由視圖&#xff1a; <template><div class"app-container"><h1>App根組件</h1><router-link to"/home">…

VScode使用npm啟動項目以及npm install ,npm start報錯問題處理

安裝啟動步驟 打開cmd 輸入指令 npm -v 查看npm是否安裝&#xff0c;需要先安裝node.js node.js安裝&#xff1a;node.js安裝 安裝包下載后&#xff0c;一直點擊next &#xff0c;安裝完成&#xff0c;打開cmd 輸入 node -v 查看安裝是否成功 使用VScode 打開項目&#xf…

《仿盒馬》app開發技術分享-- 回收金提現記錄查詢(端云一體)

開發準備 上一節我們實現了回收金提現的功能&#xff0c;并且成功展示了當前賬戶的支出列表&#xff0c;但是我們的提現相關的記錄并沒有很好的給用戶做出展示&#xff0c;用戶只知道當前賬戶提現扣款&#xff0c;并不知道回收金的去向&#xff0c;這一節我們就要實現回收金記…

芯片的起點——從硅到晶圓制造

第1篇&#xff1a;芯片的起點——從硅到晶圓制造 在討論汽車芯片如何“上車”之前&#xff0c;我們必須先回到源頭&#xff0c;從一顆芯片是如何從沙子一步步煉成講起。很多人知道芯片很復雜&#xff0c;卻未必清楚它的每一層結構、每一道工藝有何意義。本系列文章將從硅的提純…

vscode python debugger 如何調試老版本python

找到老版本資源&#xff1a; 找到老版本python debugger插件&#xff0c;現在官方github 都是24之后的release 了&#xff0c;調不了3.6 老項目 pdb&#xff1a; 太麻煩 debugpy vscode python debugger 的底層實現&#xff0c;我們可以指定老版本的debugger 來調試&#…

MVCC 怎么實現的

? 什么是 MVCC?它是怎么實現的?(適合基礎不牢固者) 一、MVCC 是什么? MVCC 全稱是:Multi-Version Concurrency Control,中文叫:多版本并發控制。 主要用于解決數據庫的讀寫并發沖突問題,它的作用是讓讀操作無需加鎖,也能讀到符合事務隔離要求的數據版本。 你可以…

深度解析企業風控API技術實踐:構建全方位企業風險畫像系統

引言 在當前的商業環境中&#xff0c;企業風險評估已成為各類商業決策的重要依據。本文將從技術實踐的角度&#xff0c;詳細介紹企業風控API的集成應用&#xff0c;重點關注API的調用方式、數據結構以及風險維度的劃分&#xff0c;幫助開發者快速構建企業風險畫像系統。 關鍵…

Mac 系統 Node.js 安裝與版本管理指南

Mac 系統 Node.js 安裝與版本管理指南 一、環境檢查 在終端執行以下命令驗證當前環境&#xff1a; node -v # 查看 Node.js 版本&#xff08;未安裝會提示命令不存在&#xff09; npm -v # 查看 npm 版本&#xff08;需 Node.js 安裝完成后生效&#xff09;二、安裝方法 …

設備健康管理系統搭建全技術解析:從架構設計到智能運維實踐

在工業 4.0 與智能制造深度融合的當下&#xff0c;設備健康管理系統已成為企業實現數字化轉型的核心基礎設施。據 Gartner 數據顯示&#xff0c;采用智能設備健康管理系統的企業&#xff0c;平均可降低 30% 的非計劃停機成本。如何基于現代技術棧構建一套高效、精準的設備健康管…