首頁  >  文章  >  Java  >  Java正規表示式的詳細介紹

Java正規表示式的詳細介紹

PHP中文网
PHP中文网原創
2017-06-22 14:52:381313瀏覽

表達式意義:

x    字元 x。例如a表示字元a
\\ 反斜線字元。書寫時要寫為\\\\。 (注意:因為Java在第一次解析時,把\\\\解析成正則表達式\\,在第二次解析時再解析為\,所以凡是不是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(簡單類別#2.字元類別
[abc]    a、b或c(簡單類別#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.? \p{javaMirrored}    等效於java.lang.Character.isMirrored()
6.Unicode 區塊和類別的類別
\p{InGreek}    Greek 區塊(簡單區塊)中的字元
\p {Lu}    大寫字母(簡單類別)
\p{Sc}    貨幣符號
\P{InGreek}    所有字符,Greek 區塊中的除外(否定)
[\p{L}&&[^ \p{Lu}]]     所有字母,大寫字母除外(減去)
7.邊界匹配器
^    行的開頭,請在正規表示式的開始使用^。表示以abc開頭的字串。例如:(^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);



##L六個標誌都是支援的:
‐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 )是不回溯的。是也可以匹配的。

以上是Java正規表示式的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn