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

Java 正則表達式四大核心功能實戰指南

     編輯:Java 程式設計入門

Java 正則表達式 API 概覽

JDK 1.4 引入 java.util.regex 包,核心類:

  • Pattern:正則表達式編譯後的模式
  • Matcher:針對輸入字符串的匹配引擎

功能一:查詢匹配


String str = "abc efg ABC";
String regEx = "[af]";  // 匹配 a 或 f

Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);

boolean found = m.find();  // true

// 忽略大小寫
Pattern p2 = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);

關鍵方法:find()(部分匹配)、matches()(全字符串匹配)、lookingAt()(前綴匹配)

功能二:提取分組


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("Group " + i + ": " + m.group(i));
    }
}
// 輸出: name.txt

分組編號規則:0 為整個匹配,1 起為捕獲組,按左括號順序編號

功能三:分割字符串


// 方式一:Pattern.split
String regEx = "::";
String[] parts = Pattern.compile(regEx).split("xd::abc::cde");
// 結果: ["xd", "abc", "cde"]

// 方式二:String.split(內部同樣使用 Pattern)
String str = "xd::abc::cde";
String[] parts2 = str.split("::");  // 更簡潔

注意:分割正則中的特殊字符需轉義,如 split("\\|")

功能四:替換與刪除


String regEx = "a+";  // 連續一個或多個 a
Matcher m = Pattern.compile(regEx).matcher("aaabbced a ccdeaa");

// 替換為大寫 A
String replaced = m.replaceAll("A");
// 結果: "Abbced A ccdeA"

// 刪除匹配內容
String deleted = m.replaceAll("");
// 結果: "bbced  ccde"

進階替換:replaceFirst() 替換首個、appendReplacement()/appendTail() 構建複雜替換邏輯

常用字符類別速查表

元字符等價類別含義
\d[0-9]數字
\D[^0-9]非數字
\s[\t\n\r\f]空白字符
\S[^\t\n\r\f]非空白字符
\w[a-zA-Z_0-9]單詞字符
\W[^a-zA-Z_0-9]非單詞字符
.[^\n]除換行外任意字符

定位符

  • ^:行首(多行模式下)
  • $:行尾(多行模式下)
  • \b:單詞邊界
  • \A:字符串開頭
  • \z:字符串結尾

性能優化建議

  1. 預編譯 Pattern:靜態常量或緩存,避免重複編譯
  2. 使用非捕獲組:(?:...) 不捕獲,減少內存開銷
  3. 避免過度回溯:慎用 .*、.+,優先用具體字符類
  4. 錨定開頭結尾:^pattern$ 可大幅提速

實戰模式示例


// 郵箱驗證
String emailRegex = "^[\\w.-]+@[\\w-]+(\\.[\\w-]+)+$";

// 手機號(中國大陸)
String phoneRegex = "^1[3-9]\\d{9}$";

// IP 地址
String ipRegex = "^((25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d?\\d)$";

// 日期 YYYY-MM-DD
String dateRegex = "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$";

正則表達式是文本處理的瑞士軍刀,掌握四大核心功能配合常用模式,能解決 90% 的字符串解析需求。

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