Java 正則表達式 解釋說明

表達式意義:

1.字符

x 字符 x。例如a表示字符a? ? ? {Java學(xué)習(xí)資料免費分享微信:tangniu520666,備注“4”}

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

\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 轉(zhuǎn)義符 ('\u001B')

\cx 對應(yīng)于 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,兩頭的字母包括在內(nèi)(范圍)

[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.預(yù)定義字符類(注意反斜杠要寫兩次,例如\d寫為\\d)任何字符

(與行結(jié)束符可能匹配也可能不匹配)

\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} 標(biāo)點符號:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

\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è)置參數(shù)MULTILINE,如 Pattern p = Pattern.compile(regex,Pattern.MULTILINE);

$ 行的結(jié)尾,請在正則表達式的結(jié)束處使用。例如:(^bca).*(abc$)表示以bca開頭以abc結(jié)尾的行。

\b 單詞邊界。例如\b(abc)表示單詞的開始或結(jié)束包含有abc,(abcjj、jjabc 都可以匹配)

\B 非單詞邊界。例如\B(abc)表示單詞的中間包含有abc,(jjabcjj匹配而jjabc、abcjj不匹配)

\A 輸入的開頭

\G 上一個匹配的結(jié)尾(個人感覺這個參數(shù)沒什么用)。例如\\Gdog表示在上一個匹配結(jié)尾處查找dog如果沒有的話則從開頭查找,注意如果開頭不是dog則不能匹配。

\Z 輸入的結(jié)尾,僅用于最后的結(jié)束符(如果有的話)

行結(jié)束符 是一個或兩個字符的序列,標(biāo)記輸入字符序列的行結(jié)尾。

以下代碼被識別為行結(jié)束符:

‐新行(換行)符 ('\n')、

‐后面緊跟新行符的回車符 ("\r\n")、

‐單獨的回車符 ('\r')、

‐下一行字符 ('\u0085')、

‐行分隔符 ('\u2028') 或

‐段落分隔符 ('\u2029)。

\z 輸入的結(jié)尾

當(dāng)編譯模式時,可以設(shè)置一個或多個標(biāo)志,例如

Pattern pattern = Pattern.compile(patternString,Pattern.CASE_INSENSITIVE + Pattern.UNICODE_CASE);

下面六個標(biāo)志都是支持的:

‐CASE_INSENSITIVE:匹配字符時與大小寫無關(guān),該標(biāo)志默認只考慮US ASCII字符。

‐UNICODE_CASE:當(dāng)與CASE_INSENSITIVE結(jié)合時,使用Unicode字母匹配

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

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

‐DOTALL: 當(dāng)使用此標(biāo)志時,.符號匹配包括行終止符在內(nèi)的所有字符

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

但是,reluctant量詞采取相反的方式:它們從被匹配字符串的開頭開始,然后逐步地一次讀取一個字符搜索匹配。它們最后試圖匹配的內(nèi)容是整個輸入字符串。

最后,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來對相應(yīng)的組進行引用,例如(ab)34\1就表示ab34ab,(ab)34(cd)\1\2就表示ab34cdabcd。

13.引用

\ Nothing,但是引用以下字符

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

可以匹配ab{|}\\

\E Nothing,但是結(jié)束從 \Q開始的引用

14.特殊構(gòu)造(非捕獲)

(?:X) X,作為非捕獲組

(?idmsux-idmsux) Nothing,但是將匹配標(biāo)志由 on 轉(zhuǎn)為 off。比如:表達式 (?i)abc(?-i)def 這時,(?i) 打開不區(qū)分大小寫開關(guān),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,以及"#"一直到結(jié)尾(#后面為注解)。(?x)例如(?x)abc#asfsdadsa可以匹配字符串a(chǎn)bc

(?idmsux-idmsux:X) X,作為帶有給定標(biāo)志 on - off 的非捕獲組。與上面的類似,上面的表達式,可以改寫成為:(?i:abc)def,或者 (?i)abc(?-i:def)

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

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

(?<=X) X,通過零寬度的正 lookbehind。零寬度正后發(fā)斷言。僅當(dāng)子表達式 X 在 此位置的左側(cè)匹配時才繼續(xù)匹配。例如,(?<=19)99 表示99前面是數(shù)字19,但不捕獲前面的19。(不回溯)

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內(nèi)容

  • \ :將下一字符標(biāo)記為特殊字符、文本、反向引用或八進制轉(zhuǎn)義符。例如,"n"匹配字符"n"。"\n"匹配換行符。序列...
    小沙鷹168閱讀 555評論 0 1
  • 最近小生,在練習(xí)藍橋杯的習(xí)題,故有同路者共勉! 故:Java正則表達式 1.字符 x 字符 x。例如a表示字...
    HowieW閱讀 981評論 0 1
  • 正則表達式到底是什么東西?字符是計算機軟件處理文字時最基本的單位,可能是字母,數(shù)字,標(biāo)點符號,空格,換行符,漢字等...
    獅子挽歌閱讀 2,161評論 0 9
  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識依舊是別人的,自己卻什么都沒獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,042評論 0 20
  • 9.19--9.23 第7章 正則表達式 正則表達式是一個拆分字符串并查詢相關(guān)信息的過程。 推薦練習(xí)網(wǎng)站: js ...
    如201608閱讀 1,055評論 0 4