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

Java 正則表達式完全指南:Pattern/Matcher 核心 API 與四大實戰場景

     編輯:Java 相關知識

正則表達式是什麼?

你用過 *.tmp 查找臨時文件?用過編輯器「查找/替換」?它們本質都是正則表達式。正則提供強大字符串處理能力:

  • 模式測試 (數據驗證:電話、身份證格式)
  • 文本替換/刪除
  • 基於模式提取子串

JDK 1.4+ 核心包:java.util.regex

兩大核心類:

  • Pattern:編譯後的正則模式 (不可變、線程安全、可共享)
  • Matcher:針對輸入序列的匹配引擎 (有狀態、不可共享)

流程:Pattern.compile(regex) → pattern.matcher(input) → matcher.find()/matches()/lookingAt()

正則語法速查表

元字符含義等價字符類
\d數字[0-9]
\D非數字[^0-9]
\s空白字符[ \t\n\x0B\f\r]
\S非空白[^ \t\n\x0B\f\r]
\w單詞字符[a-zA-Z_0-9]
\W非單詞字符[^a-zA-Z_0-9]
.任意字符 (含換行需 DOTALL 模式)-
^行首 / [^...] 否定字符類-
$行尾-
|或-
[...]字符類 (單字符)-
(...)分組捕獲-

四大核心操作實戰

1. 字符串匹配/查找

String str = "aaabcefgABC";
String regex = "aaa|fff";
Pattern p = Pattern.compile(regex);  // 或 Pattern.CASE_INSENSITIVE 忽略大小寫
Matcher m = p.matcher(str);
boolean found = m.find();  // 掃描尋找下一匹配
// m.matches()  - 整串匹配
// m.lookingAt() - 從開頭匹配

2. 提取捕獲組

從完整路徑提取文件名:

String regex = ".+\\\\(.+)$";  // 最後一個反斜杠後的內容到行尾
String str = "c:\\dir1\\dir2\\name.txt";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if (m.find()) {
    for (int i = 1; i <= m.groupCount(); i++) {
        System.out.println(m.group(i));  // group(0) 是整個匹配
    }
}
// 輸出: name.txt

3. 字符串分割

String regex = "::";
Pattern p = Pattern.compile(regex);
String[] parts = p.split("xd::abc::cde");
// 等價於 "xd::abc::cde".split("::");
// 結果: ["xd", "abc", "cde"]

4. 替換/刪除

String regex = "a+";  // 一個或多個 a
Matcher m = p.matcher("aaabbcedaccdeaa");
String replaced = m.replaceAll("A");  // "AbbcedAccdeA"
String deleted = m.replaceAll("");    // "bbced ccde" (刪除所有 a 序列)

String 類便捷方法 (內部委托正則)

  • str.split(regex)
  • str.replaceAll(regex, replacement)
  • str.matches(regex) (整串匹配)

進階提示

  • 預編譯複用:Pattern 不可變且線程安全,作為常量/靜態字段複用,避免重複編譯開銷
  • Pattern 標誌位:CASE_INSENSITIVE、MULTILINE (^/$ 匹配行)、DOTALL (. 匹配換行)、UNICODE_CASE
  • 貪婪/勉強/佔有量詞:* + ? (貪婪)、*? +? ?? (勉強)、*+ ++ ?+ (佔有,不回溯)
  • 邊界匹配:\b (單詞邊界)、\B (非單詞邊界)、\A (字符串開頭)、\z (字符串結尾)

掌握 Pattern/Matcher 核心協作模式,配合豐富語法元素,即可輕鬆應對 Java 中 95% 的字符串處理需求。

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