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

Java 正則表達式完整語法參考手冊

     編輯:Java 程式設計入門

字元與字元類

語法說明
x字元 x
\\反斜線字元(Java 字串寫 \\\\)
\0n \0nn \0mnn八進位值字元
\xhh十六進位值字元 (0xhh)
\uhhhhUnicode 字元 (0xhhhh)
\t \n \r \f \a \e製表、換行、回車、換頁、響鈴、Escape
\cxControl-x (Ctrl+字元)
[abc]簡單字元類:a 或 b 或 c
[^abc]否定字元類:非 a/b/c
[a-zA-Z]範圍:a-z 或 A-Z
[a-d[m-p]]聯集:a-d 或 m-p
[a-z&&[def]]交集:d、e、f
[a-z&&[^bc]]減去:a-z 除去 b、c

預定義字元類(Java 字串雙重轉義)

語法等價字元類Java 字串寫法
.任意字元(可能不含行結束符)"."
\d數字 [0-9]"\\d"
\D非數字 [^0-9]"\\D"
\s空白 [ \t\n\x0B\f\r]"\\s"
\S非空白"\\S"
\w單詞字元 [a-zA-Z_0-9]"\\w"
\W非單詞字元"\\W"

POSIX 字元類(僅 US-ASCII)

語法含義
\p{Lower}小寫字母 [a-z]
\p{Upper}大寫字母 [A-Z]
\p{ASCII}所有 ASCII [\x00-\x7F]
\p{Alpha}字母 [\p{Lower}\p{Upper}]
\p{Digit}數字 [0-9]
\p{Alnum}字母數字 [\p{Alpha}\p{Digit}]
\p{Punct}標點符號
\p{Graph}可見字元 [\p{Alnum}\p{Punct}]
\p{Print}可列印字元 [\p{Graph}\x20]
\p{Blank}空格或製表 [ \t]
\p{Cntrl}控制字元 [\x00-\x1F\x7F]
\p{XDigit}十六進位數字 [0-9a-fA-F]
\p{Space}空白字元 [ \t\n\x0B\f\r]

java.lang.Character 類別屬性

語法等價方法
\p{javaLowerCase}Character.isLowerCase()
\p{javaUpperCase}Character.isUpperCase()
\p{javaWhitespace}Character.isWhitespace()
\p{javaMirrored}Character.isMirrored()

Unicode 區塊與類別

語法說明
\p{InGreek}Greek 區塊字元
\p{Lu}大寫字母類別
\p{Sc}貨幣符號
\P{InGreek}非 Greek 區塊字元(大寫 P 表否定)
[\p{L}&&[^\p{Lu}]]所有字母但非大寫(減去)

邊界匹配器

語法說明
^行開頭(需 Pattern.MULTILINE)
$行結尾(需 MULTILINE)
\b單詞邊界
\B非單詞邊界
\A輸入開頭
\G上次匹配結尾
\Z輸入結尾(最後行結束符前)
\z輸入絕對結尾

行結束符:\n、\r\n、\r、\u0085、\u2028、\u2029。

編譯旗標


Pattern pattern = Pattern.compile(regex,
    Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL | Pattern.UNICODE_CASE | Pattern.UNIX_LINES | Pattern.COMMENTS | Pattern.CANON_EQ);
旗標效果
CASE_INSENSITIVE不分大小寫(預設僅 US-ASCII)
UNICODE_CASE配合 CASE_INSENSITIVE 進行 Unicode 大小寫折疊
MULTILINE^/$ 匹配行首尾而非整個輸入
UNIX_LINES多行模式下僅 \n 視為行結束符
DOTALL. 匹配含行結束符在內的所有字元
COMMENTS允許模式中空白與 # 註解
CANON_EQ考慮 Unicode 規範等價

數量詞

貪婪勉強佔有說明
X?X??X?+0 或 1 次
X*X*?X*+0 或多次
X+X+?X++1 或多次
X{n}X{n}?X{n}+恰好 n 次
X{n,}X{n,}?X{n,}+至少 n 次
X{n,m}X{n,m}?X{n,m}+n 到 m 次

差異:貪婪優先吃盡再回溯;勉強優先少吃再擴展;佔有吃盡不回溯(效能最佳、功能最受限)。

邏輯運算與分組

語法說明
XYX 接著 Y
X|YX 或 Y
(X)捕獲組(編號從 1 起,按左括號順序)
(?:X)非捕獲組
\n反向引用第 n 組

零寬度斷言

語法名稱說明
(?=X)正向先行斷言右側匹配 X 才繼續,不消耗字元
(?!X)負向先行斷言右側不匹配 X 才繼續
(?<=X)正向後行斷言左側匹配 X 才繼續(固定寬度)
(?<!X)負向後行斷言左側不匹配 X 才繼續
(?>X)獨立非捕獲組不回溯(佔有性質)

行內旗標切換

語法效果
(?i)開啟不分大小寫
(?-i)關閉不分大小寫
(?m)開啟多行
(?s)開啟 DOTALL
(?x)開啟註解模式
(?idmsux-idmsux:X)非捕獲組內局部啟用/停用旗標

引用與轉義

語法說明
\Q...\E字面引用區間(內部特殊字元失效,除 \E)
\單字元轉義

Java 程式碼常用模式


// 編譯一次,多次複用
Pattern p = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");  // 日期 yyyy-MM-dd
Matcher m = p.matcher("Today is 2024-01-15");
while (m.find()) System.out.println(m.group());  // 2024-01-15

// 分割
String[] parts = "a,b;c".split("[,;]");

// 替換
String replaced = "abc123def".replaceAll("\\d+", "#");  // abc#def

// 分組提取
Pattern p2 = Pattern.compile("(\\w+)@(\\w+\\.\\w+)");
Matcher m2 = p2.matcher("user@example.com");
if (m2.matches()) {
    System.out.println(m2.group(1)); // user
    System.out.println(m2.group(2)); // example.com
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved