表達式意義:java
1.字符git
x 字符 x。例如a表示字符a正則表達式
\\ 反斜線字符。在書寫時要寫爲\\\\。(注意:由於java在第一次解析時,把\\\\解析成正則表達式\\,在第二次解析時再解析爲\,因此凡是否是1.1列舉到的轉義字符,包括1.1的\\,而又帶有\的都要寫兩次)c#
\0n 帶有八進制值 0的字符 n (0 <= n <= 7)ide
\0nn 帶有八進制值 0的字符 nn (0 <= n <= 7)spa
\0mnn 帶有八進制值 0的字符 mnn(0 <= m <= 三、0 <= n <= 7)code
\xhh 帶有十六進制值 0x的字符 hh字符串
\uhhhh 帶有十六進制值 0x的字符 hhhhit
\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.邊界匹配器
^ 行的開頭,請在正則表達式的開始處使用^。例如:^(abc)表示以abc開頭的字符串。注意編譯的時候要設置參數MULTILINE,如 Pattern p =Pattern.compile(regex,Pattern.MULTILINE);
$ 行的結尾,請在正則表達式的結束處使用。例如:(^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:匹配字符時與大小寫無關,該標誌默認只考慮USASCII字符。
‐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時,因爲已經匹配,就跳出了非捕獲組,而再也不次對組內的字符進行匹配。能夠加快速度。