首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 正則表達式實戰指南:匹配、替換、查找與分割核心 API 全解析

     編輯:Java 相關知識

核心類簡介

Java 正則表達式主要涉及 java.util.regex 包下的兩個核心類:

  • Pattern:正則表達式的編譯表示,線程安全,通過 Pattern.compile(regex) 獲取實例。
  • Matcher:對輸入字符串進行解釋和匹配的引擎,非線程安全,通過 pattern.matcher(input) 獲取。

四大核心操作實戰

1. 字符串匹配

判斷整個字符串是否符合規則,使用 String.matches(regex) 或 Matcher.matches()。

// 驗證手機號:1開頭,第二位3/5/8,共11位
String phone = "13539770000";
boolean valid = phone.matches("1[358]\\d{9}"); // true

// 驗證字符串包含特定子串
String str = "abcd12345efgh";
boolean contains = str.matches("\\w+12345\\w+"); // true

2. 字符串查找與提取

使用 Matcher.find() 遍歷所有匹配片段,group() 獲取捕獲組內容。

String str = "qq84461376qq qq84461377qq qq84461378qq";
Pattern p = Pattern.compile("qq(.*?)qq"); // 非貪婪模式
Matcher m = p.matcher(str);
List results = new ArrayList<>();
while (m.find()) {
    results.add(m.group(1)); // 獲取第1個捕獲組
}
// 結果: [84461376, 84461377, 84461378]

3. 字符串替換

String.replaceAll(regex, replacement) 或 Matcher.replaceAll() / replaceFirst()。

String str = "file.name.txt.doc";
// 將點替換為下劃線 (需轉義)
String result = str.replaceAll("\\.", "_"); 
// 結果: "file_name_txt_doc"

// 使用 Matcher 進行複雜替換 (如格式化手機號)
String phone = "13539770000";
String formatted = phone.replaceAll("(\\d{3})(\\d{4})(\\d{4})", "$1-$2-$3");
// 結果: "135-3977-0000"

4. 字符串分割

String.split(regex) 根據正則切割字符串。

String domains = "www.google.com;mail.yahoo.com;docs.microsoft.com";
// 按分號或點分割
String[] parts = domains.split("[;.]");
// 結果: ["www", "google", "com", "mail", "yahoo", "com", "docs", "microsoft", "com"]

常用正則語法速查表

元字符說明
.匹配除換行符外任意字符
\d數字 [0-9]
\w單詞字符 [a-zA-Z0-9_]
\s空白字符 (空格, Tab, 換行)
^行首
$行尾
*0 次或多次
+1 次或多次
?0 次或 1 次
{n}恰好 n 次
{n,}至少 n 次
{n,m}n 到 m 次
()捕獲組
(?:)非捕獲組
|或運算

實用驗證正則集錦

  • Email: ^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$
  • URL: ^https?://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$
  • 身份證 (18位): ^\\d{17}[\\dXx]$
  • IPv4: ^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$
  • 中文字符: [\\u4e00-\\u9fa5]

性能優化建議

  1. 預編譯 Pattern:靜態常量或緩存 Pattern 實例,避免重複編譯。
  2. 使用非捕獲組:(?:...) 減少內存開銷。
  3. 避免過度嵌套量詞:如 (a+)* 易導致災難性回溯。
  4. 錨點優化:合理使用 ^ $ 縮小匹配範圍。

總結

掌握 Pattern/Matcher 雙核心、四大操作 API 及常用語法,即可應對 90% 的文本處理場景。複雜業務中請優先考慮預編譯與回溯優化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved