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

Java 正則表達式超詳細指南:從基礎語法到 java.util.regex 與 Jakarta-ORO 兩大庫實戰

     編輯:Java 綜合教學

Java 正則表達式完整指南

第一部分:正則表達式基礎語法

核心元字符

符號含義
.任意字符(除換行符)
[abc]字符類:匹配 a/b/c 任一
[^abc]否定字符類
|或運算
()分組捕獲
?0 或 1 次
*0 或多次
+1 或多次
{n}恰好 n 次
{n,}至少 n 次
{n,m}n 到 m 次
^行首(多行模式)
$行尾(多行模式)
\d數字 [0-9]
\w單詞字符 [a-zA-Z0-9_]
\s空白字符
\b單詞邊界

常見示例

  • 電話號碼:\(\d{3}\)\s*\d{3}[- ]?\d{4}
  • 重複單詞:\b(\w+)\s+\1\b(反向引用 \1)
  • 忽略大小寫:(?i)pattern 或 Pattern.CASE_INSENSITIVE

第二部分:java.util.regex (JDK 1.4+ 內建)

核心類

  • Pattern:編譯後的正則模式,Pattern.compile(regex, flags)
  • Matcher:匹配器狀態機,pattern.matcher(input)

常用方法

類方法說明
Patternmatches(regex, input)一次性匹配整串
Patternsplit(input, limit)按模式分割字符串
Matcherfind() / find(start)查找下一匹配
Matchermatches()整串匹配
MatcherlookingAt()前綴匹配
Matchergroup() / group(int)獲取捕獲組
Matcherstart()/end()匹配位置
MatcherreplaceAll(repl) / replaceFirst(repl)替換
MatcherappendReplacement(sb, repl) / appendTail(sb)增量替換構建
Matcherreset() / reset(input)重置匹配器

關鍵示例

// 分割
String[] parts = Pattern.compile("!!").split("A!!B!!C", 2); // [A, B!!C]

// 替換所有元音為大寫
Matcher m = Pattern.compile("[aeiou]").matcher(str);
StringBuffer sb = new StringBuffer();
while (m.find()) m.appendReplacement(sb, m.group().toUpperCase());
m.appendTail(sb);

第三部分:Jakarta-ORO (第三方庫,歷史參考)

核心接口:PatternCompiler、Pattern、PatternMatcher、Util.substitute()。支持 Perl5 風格語法,功能與 java.util.regex 類似但 API 風格不同。現推薦使用標準庫。

ORO 替換示例

Perl5Substitution sub = new Perl5Substitution("{$1(新內容)}");
String result = Util.substitute(matcher, pattern, sub, input, Util.SUBSTITUTE_ALL);

第四部分:String 類便利方法

matches(regex), split(regex), replaceFirst(regex, repl), replaceAll(regex, repl) 內部委託 Pattern/Matcher。

第五部分:Email 驗證示例

// 簡易驗證:不以 ./@ 開頭、不含非法字符
Pattern p = Pattern.compile("^[^.@][A-Za-z0-9._@~-]+$");
Matcher m = p.matcher(email);
if (!m.matches()) { /* 非法 */ }

總結

  • 掌握元字符、量詞、分組、反向引用、標志位
  • 優先使用 java.util.regex 標準庫
  • 複雜替換用 appendReplacement/appendTail
  • 預編譯 Pattern 復用提升性能
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved