溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java的正則表達式介紹

發(fā)布時間:2020-06-22 11:27:10 來源:億速云 閱讀:129 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關java的正則表達式,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

1、字符

x 字符 x。例如a表示字符a

\\ 反斜線字符。在書寫時要寫為\\\\。(注意:因為java在第一次解析時,把\\\\解析成正則表達式\\,在第二次解析時再解析為\,所以凡是不是1.1列舉到的轉義字符,包括1.1的\\,而又帶有\(zhòng)的都要寫兩次)

\0n 帶有八進制值 0的字符 n (0 \0nn 帶有八進制值 0的字符 nn (0 \0mnn 帶有八進制值 0的字符 mnn(0 \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 數(shù)字:[0-9]

\D 非數(shù)字: [^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} 十進制數(shù)字:[0-9]

\p{Alnum} 字母數(shù)字字符:[\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} 十六進制數(shù)字:[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開頭的字符串。注意編譯的時候要設置參數(shù)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 上一個匹配的結尾(個人感覺這個參數(shù)沒什么用)。例如\\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字符的規(guī)范等價

8、Greedy 數(shù)量詞

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

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

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

9.Reluctant 數(shù)量詞

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

X*? X,零次或多次

X+? X,一次或多次

X{n}? X,恰好 n 次

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

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

10、Possessive 數(shù)量詞

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

X*+ X,零次或多次

X++ X,一次或多次

X{n}+ X,恰好 n 次

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

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

Greedy,Reluctant,Possessive的區(qū)別在于:(注意僅限于進行.等模糊處理時)

greedy量 詞被看作“貪婪的”,因為它第一次就讀入整個被模糊匹配的字符串。如果第一個匹配嘗試(整個輸入字符串)失敗,匹配器就會在被匹配字符串中的最后一位后退一個字符并且再次嘗試,重復這個過程,直到找到匹配或者沒有更多剩下的字符可以后退為止。根據(jù)表達式中使用的量詞,它最后試圖匹配的內容是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) 打開不區(qū)分大小寫開關,abc 匹配

idmsux說明如下:

‐i CASE_INSENSITIVE :US-ASCII 字符集不區(qū)分大小寫。(?i)

‐d UNIX_LINES : 打開UNIX換行符

‐m MULTILINE :多行模式(?m)

UNIX下?lián)Q行為\n

WINDOWS下?lián)Q行為\r\n(?s)

‐u UNICODE_CASE : Unicode 不區(qū)分大小寫。(?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 在 此位置的右側匹配時才繼續(xù)匹配。例如,\w+(?=\d) 表示字母后面跟數(shù)字,但不捕獲數(shù)字(不回溯)

(?!X) X,通過零寬度的負 lookahead。零寬度負先行斷言。僅當子表達式 X 不在 此位置的右側匹配時才繼續(xù)匹配。例如,\w+(?!\d) 表示字母后面不跟數(shù)字,且不捕獲數(shù)字。

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

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

當表達式為a(?:b|bc)m是可以匹配的,而當表達式是a(?>b|bc)時是不能匹配的,因為當后者匹配到b時,由于已經匹配,就跳出了非捕獲組,而不再次對組內的字符進行匹配??梢约涌焖俣取?/p>

關于java的正則表達式介紹就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI