JavaRegex的解釋說明

來源:互聯網
上載者:User

運算式意義:

 

1.字元


x    字元 x。例如a表示字元a
//    反斜線字元。在書寫時要寫為////
。(注意:因為java在第一次解析時,把////
解析成Regex//,在第二次解析時再解析為/,所以凡是不是1.1列舉到的逸出字元,包括1.1的//,而又帶有/的都要寫兩次)
/0n    帶有八進位值 0的字元 n (0 <= n <= 7)
/0nn    帶有八進位值 0的字元 nn (0 <= n <= 7)
/0mnn    帶有八進位值 0的字元 mnn(0 <= m <= 3、0 <= n <= 7)
/xhh    帶有十六進位值 0x的字元 hh
/uhhhh    帶有十六進位值 0x的字元 hhhh
/t    定位字元 ('/u0009')
/n    新行(換行)符 ('/u000A')
/r    斷行符號符 ('/u000D')
/f    換頁符 ('/u000C')
/a    警示 (bell) 符 ('/u0007')
/e    轉義符 ('/u001B')
/cx    對應於 x 的控制符
2.字元類

[abc]    a、b或 c(簡單類)。例如[egd]表示包含有字元e、g或d。
[^abc]    任何字元,除了 a、b或 c(否定)。例如[^egd]表示不包含字元e、g或d。
[a-zA-Z]    a到 z或 A到 Z,兩頭的字母包括在內(範圍)
[a-d[m-p]]    a到 d或 m到 p:[a-dm-p](並集)
[a-z&&[def]]    d、e或 f(交集)
[a-z&&[^bc]]    a到 z,除了 b和 c:[ad-z](減去)
[a-z&&[^m-p]]    a到 z,而非 m到 p:[a-lq-z](減去)
3.預定義字元類
(注意反斜線要寫兩次,例如/d寫為
//d



)

任何字元

(與行結束符可能匹配也可能不匹配)
/d    數字:[0-9]
/D    非數字: [^0-9]
/s    空白字元:[ /t/n/x0B/f/r]
/S    非空白字元:[^/s]
/w    單詞字元:[a-zA-Z_0-9]
/W    非單詞字元:[^/w]
4.POSIX 字元類
(僅 US-ASCII)(注意反斜線要寫兩次,例如/p{Lower}寫為//p{Lower})
/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]
5.java.lang.Character 類
(簡單的 java 字元類型)
/p{javaLowerCase}    等效於 java.lang.Character.isLowerCase()
/p{javaUpperCase}    等效於 java.lang.Character.isUpperCase()
/p{javaWhitespace}    等效於 java.lang.Character.isWhitespace()
/p{javaMirrored}    等效於 java.lang.Character.isMirrored()
6.Unicode 塊和類別的類

/p{InGreek}    Greek 塊(簡單塊)中的字元
/p{Lu}    大寫字母(簡單類別)
/p{Sc}    貨幣符號
/P{InGreek}    所有字元,Greek 塊中的除外(否定)
[/p{L}&&[^/p{Lu}]]     所有字母,大寫字母除外(減去)
7.邊界匹配器

^    行的開頭,請在Regex的開始處使用^。例如:^(abc)表示以abc開頭的字串。注意編譯的時候要設定參數MULTILINE,如 Pattern p = Pattern.compile(regex,Pattern.MULTILINE);
$    行的結尾,請在Regex的結束處使用。例如:(^bca).*(abc$)表示以bca開頭以abc結尾的行。
/b    單詞邊界。例如/b(abc)表示單詞的開始或結束包含有abc,(abcjj、jjabc 都可以匹配)
/B    非單詞邊界。例如/B(abc)表示單詞的中間包含有abc,(jjabcjj匹配而jjabc、abcjj不匹配)
/A    輸入的開頭
/G    上一個匹配的結尾(個人感覺這個參數沒什麼用)。例如//Gdog表示在上一個匹配結尾處尋找dog如果沒有的話則從開頭尋找,注意如果開頭不是dog則不能匹配。
/Z    輸入的結尾,僅用於最後的結束符(如果有的話)
行結束符 是一個或兩個字元的序列,標記輸入字元序列的行結尾。
以下代碼被識別為行結束符:
‐新行(換行)符 ('/n')、
‐後面緊跟新行符的斷行符號符 ("/r/n")、
‐單獨的斷行符號符 ('/r')、
‐下一行字元 ('/u0085')、
‐行分隔字元 ('/u2028') 或
‐段落分隔字元 ('/u2029)。
/z    輸入的結尾
當編譯模式時,可以設定一個或多個標誌,例如
Pattern pattern = Pattern.compile(patternString,Pattern.CASE_INSENSITIVE + Pattern.UNICODE_CASE);
下面六個標誌都是支援的:
‐CASE_INSENSITIVE:匹配字元時與大小寫無關,該標誌預設只考慮US ASCII字元。
‐UNICODE_CASE:當與CASE_INSENSITIVE結合時,使用Unicode字母匹配
‐MULTILINE:^和$匹配一行的開始和結尾,而不是整個輸入
‐UNIX_LINES: 當在多行模式下匹配^和$時,只將'/n'看作行終止符
‐DOTALL: 當使用此標誌時,.符號匹配包括行終止符在內的所有字元
‐CANON_EQ: 考慮Unicode字元的規範等價
8.Greedy 數量詞

X?    X,一次或一次也沒有
X*    X,零次或多次
X+    X,一次或多次
X{n}    X,恰好 n 次
X{n,}    X,至少 n 次
X{n,m}    X,至少 n 次,但是不超過 m 次
9.Reluctant 數量詞

X??    X,一次或一次也沒有
X*?    X,零次或多次
X+?    X,一次或多次
X{n}?    X,恰好 n 次
X{n,}?    X,至少 n 次
X{n,m}?    X,至少 n 次,但是不超過 m 次
10.Possessive 數量詞

X?+    X,一次或一次也沒有
X*+    X,零次或多次
X++    X,一次或多次
X{n}+    X,恰好 n 次
X{n,}+    X,至少 n 次
X{n,m}+    X,至少 n 次,但是不超過 m 次
Greedy,Reluctant,Possessive的區別在於:(注意僅限於進行.等模糊處理時)
greedy量
詞被看作“貪婪的”,因為它第一次就讀入整個被模糊比對的字串。如果第一個匹配嘗試(整個輸入字串)失敗,匹配器就會在被匹配字串中的最後一位後退
一個字元並且再次嘗試,重複這個過程,直到找到匹配或者沒有更多剩下的字元可以後退為止。根據運算式中使用的量詞,它最後試圖匹配的內容是1
個或者0個字元。
但是,reluctant量詞採取相反的方式:它們從被匹配字串的開頭開始,然後逐步地一次讀取一個字元搜尋匹配。它們最後試圖匹配的內容是整個輸入字串。
最後,possessive量詞總是讀完整個輸入字串,嘗試一次(而且只有一次)匹配。和greedy量詞不同,possessive從不後退。
11.Logical 運算子

XY    X 後跟 Y
X|Y    X 或 Y
(X)    X,作為擷取的群組。例如(abc)表示把abc作為一個整體進行捕獲
12.Back 引用

/n    任何匹配的 nth擷取的群組
擷取的群組可以通過從左至右計算其開括弧來編號。例如,在運算式 ((A)(B(C)))中,存在四個這樣的組:
1        ((A)(B(C)))
2        /A
3        (B(C))
4        (C)
在運算式中可以通過/n來對相應的組進行引用,例如(ab)34/1就表示ab34ab,(ab)34(cd)/1/2就表示ab34cdabcd。
13.引用

/    Nothing,但是引用以下字元
/Q    Nothing,但是引用所有字元,直到 /E。QE之間的字串會原封不動的使用(1.1中逸出字元的除外)。例如, ab//Q{|}////E
可以匹配ab{|}//
/E    Nothing,但是結束從 /Q開始的引用
14.特殊構造(非捕獲)

(?:X)    X,作為非擷取的群組
(?idmsux-idmsux)     Nothing,但是將匹配標誌由 on 轉為 off。比如:運算式 (?i)abc(?-i)def 這時,(?i) 開啟不區分大小寫開關,abc 匹配
idmsux說明如下:
‐i CASE_INSENSITIVE :US-ASCII 字元集不區分大小寫。(?i)
‐d UNIX_LINES : 開啟UNIX分行符號
‐m MULTILINE :多行模式(?m)
UNIX下換行為/n
WINDOWS下換行為/r/n(?s)
‐u UNICODE_CASE : Unicode 不區分大小寫。(?u)
‐x COMMENTS :可以在pattern裡面使用註解,忽略pattern裡面的whitespace,以及"#"一直到結尾(#後面為註解)。(?x)例如(?x)abc#asfsdadsa可以匹配字串abc
(?idmsux-idmsux:X)     X,作為帶有給定標誌 on - off 的非擷取的群組。與上面的類似,上面的運算式,可以改寫成為:(?i:abc)def,或者 (?i)abc(?-i:def)
(?=X)    X,通過零寬度的正 lookahead。零寬度正先行斷言,僅當子運算式 X 在 此位置的右側匹配時才繼續匹配。例如,/w+(?=/d) 表示字母后面跟數字,但不捕獲數字(不回溯)
(?!X)    X,通過零寬度的負 lookahead。零寬度負先行斷言。僅當子運算式 X 不在 此位置的右側匹配時才繼續匹配。例如,/w+(?!/d) 表示字母后面不跟數字,且不捕獲數字。
(?<=X)    X,通過零寬度的正 lookbehind。零寬度正後發斷言。僅當子運算式 X 在 此位置的左側匹配時才繼續匹配。例如,(?<=19)99 表示99前面是數字19,但不捕獲前面的19。(不回溯)
(?
(?>X)    X,作為獨立的非擷取的群組(不回溯)
(?=X)與(?>X)的區別在於(?>X)是不回溯的。例如被匹配的字串為abcm
當運算式為a(?:b|bc)m是可以匹配的,而當運算式是a(?>b|bc)時是不能匹配的,因為當後者匹配到b時,由於已經匹配,就跳出了非擷取的群組,而不再次對組內的字元進行匹配。可以加快速度。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.