成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java正則表達式的解釋說明

開發 后端
本文分十四個類別對正則表達式的意義進行了解釋,這十四各類別是:字符/字符類/預定義字符類/POSIX字符類/java.lang.Character類/Unicode塊和類別的類/邊界匹配器/Greedy數量詞/Reluctant數量詞/Possessive數量詞/Logical運算符/Back引用/引用/特殊構造。

1.1.字符

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 的控制符

1.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](減去)

1.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]

1.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]

1.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()

1.6.Unicode 塊和類別的類

\p{InGreek}    Greek 塊(簡單塊)中的字符

\p{Lu}    大寫字母(簡單類別)

\p{Sc}    貨幣符號

\P{InGreek}    所有字符,Greek 塊中的除外(否定)

[\p{L}&&[^\p{Lu}]]     所有字母,大寫字母除外(減去)

1.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:匹配字符時與大小寫無關,該標志默認只考慮US ASCII字符。

‐UNICODE_CASE:當與CASE_INSENSITIVE結合時,使用Unicode字母匹配

‐MULTILINE:^和$匹配一行的開始和結尾,而不是整個輸入

‐UNIX_LINES: 當在多行模式下匹配^和$時,只將'\n'看作行終止符

‐DOTALL: 當使用此標志時,.符號匹配包括行終止符在內的所有字符

‐CANON_EQ: 考慮Unicode字符的規范等價

1.8.Greedy 數量詞

X?    X,一次或一次也沒有

X*    X,零次或多次

X+    X,一次或多次

X{n}    X,恰好 n 次

X{n,}    X,至少 n 次

X{n,m}    X,至少 n 次,但是不超過 m 次

1.9.Reluctant 數量詞

X??    X,一次或一次也沒有

X*?    X,零次或多次

X+?    X,一次或多次

X{n}?    X,恰好 n 次

X{n,}?    X,至少 n 次

X{n,m}?    X,至少 n 次,但是不超過 m 次

1.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從不后退。

1.11.Logical 運算符

XY    X 后跟 Y

X|Y    X 或 Y

(X)    X,作為捕獲組。例如(abc)表示把abc作為一個整體進行捕獲

1.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。

1.13.引用

\    Nothing,但是引用以下字符

\Q    Nothing,但是引用所有字符,直到 \E。QE之間的字符串會原封不動的使用(1.1中轉義字符的除外)。例如, ab\\Q{|}\\\\E

可以匹配ab{|}\\

\E    Nothing,但是結束從 \Q開始的引用

1.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,通過零寬度的負 lookbehind。零寬度負后發斷言。僅當子表達式 X 不在此位置的左側匹配時才繼續匹配。例如,(?<!19)99 表示99前面不能是19,且不捕獲前面的東東。

(?>X)    X,作為獨立的非捕獲組(不回溯)

(?=X)與(?>X)的區別在于(?>X)是不回溯的。例如被匹配的字符串為abcm

當表達式為a(?:b|bc)m是可以匹配的,而當表達式是a(?>b|bc)時是不能匹配的,因為當后者匹配到b時,由于已經匹配,就跳出了非捕獲組,而不再次對組內的字符進行匹配。可以加快速度。

【編輯推薦】

  1. Java正則表達式工具類實例
  2. Zend為Java提供的PHP解決方案
  3. JAVA 正則表達式4種常用的功能
  4. Java正則表達式之group()
  5. Java 14年的變化  

【責任編輯:慧增 TEL:(010)68476606】

責任編輯:仲衡 來源: xiaobai's daily life
相關推薦

2016-11-10 16:21:22

Java 正則表達式

2018-09-27 15:25:08

正則表達式前端

2009-02-18 09:48:20

正則表達式Java教程

2020-09-04 09:16:04

Python正則表達式虛擬機

2023-10-07 08:25:09

Java處理工具正則表達式

2009-06-08 16:49:05

Java正則表達式group

2009-09-16 17:15:57

正則表達式引擎

2022-01-04 11:35:03

Linux Shel正則表達式Linux

2023-09-13 08:12:45

2024-09-14 09:18:14

Python正則表達式

2011-07-11 12:33:30

JAVA

2009-08-07 14:24:31

.NET正則表達式

2022-03-28 06:19:14

正則表達式開發

2019-07-17 15:45:47

正則表達式字符串前端

2021-01-27 11:34:19

Python正則表達式字符串

2009-09-16 18:19:34

正則表達式組

2011-06-02 12:34:16

正則表達式

2017-05-12 10:47:45

Linux正則表達式程序基礎

2010-03-25 18:25:36

Python正則表達式

2009-09-08 09:32:13

正則表達式學習
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线视频一区二区 | 麻豆久久久久久 | 国产精品一区二区在线播放 | 欧美激情久久久久久 | 国产精品久久9 | 欧美综合在线观看 | 日本不卡一区 | 国产精品视频二区三区 | 日本视频在线 | 国产中文在线观看 | 瑟瑟视频在线看 | 欧美老妇交乱视频 | 日韩在线中文字幕 | 亚洲在线免费观看 | 二区三区视频 | 婷婷色在线 | 亚洲二区视频 | 精品中文字幕一区 | 亚洲一区二区在线电影 | 国产精品欧美大片 | 日日拍夜夜| 国产视频第一页 | 精品一区二区三区在线观看 | 国产精品美女久久久久aⅴ国产馆 | a毛片视频网站 | 午夜一区二区三区视频 | 欧美专区在线 | 成人免费视频 | 久久久亚洲综合 | 亚洲精品免费在线观看 | 久久机热 | 日韩一区二区三区在线视频 | 综合久久网 | 97视频免费 | 91精品久久久久久久久久 | 中文字幕加勒比 | av在线三级| 久久亚洲综合 | 天天操天天射天天舔 | 久久久久黑人 | 91亚洲精品在线观看 |