Java 正則表達式學習筆記

正則表達式是一種強大的字符串處理工具,平時經常會用到。這裏完整的做一次總結,以便查閱記憶。

1. 字符串中的正則表達式

使用正則表達式可以對字符串進行查找、提取、分割、替換等操作。String類當中提供瞭如下幾個特殊方法:

  • boolean matches(String regex):判斷該字符串是否匹配指定的正則表達式。
  • String replaceAll(String regex, String replacement):將該字符串中所有匹配regex的子串替換成replacement。
  • String[] split(String regex):以regex作爲分隔符,把該字符串分割成多個子串。

以上這些特殊的方法都依賴於Java提供的正則表達式。

2. 創建正則表達式

  1. x: 字符x(x可代表任何合法的字符);
  2. \0mnn: 八進制數Omnn所表示的字符;
  3. \xhh: 十六進制0xhh所表示的字符;
  4. \uhhhh: 十六進制0xhhhh所表示的UNICODE字符;
  5. \t :製表符('\u0009');
  6. \n: 新行(換行)符('\u000A');
  7. \r: 回車符('\u000D');
  8. \f: 換頁符('\u000C');
  9. \a: 報警(bell)符('\u0007');
  10. \e: Escape符('\u001B');
  11. \cx: x對應的控制符。例如,\cM匹配Ctrl-M。x值必須爲A~Z或a~z之一;

3. 正則表達式中的特殊字符

  1. $: 匹配一行的結尾。要匹配$字符本身,請使用\$;
  2. ^: 匹配一行的開頭。要匹配^字符本身,請使用\^;
  3. (): 標記子表達式的開始和結束位置。要匹配這些字符,請使用\(和\);
  4. []: 用於確定中括號表達式的開始和結束位置。要匹配這些字符,請使用\[和\];
  5. {}: 用於標記前面子表達式的出現的頻度。要匹配這些字符,請使用\{和\};
  6. *: 指定前面子表達式可以出現零次或多次。要匹配*字符本身,請使用\*;
  7. +: 指定前面子表達式可以出現一次或多次。要匹配+字符本身,請使用\+;
  8. ?: 指定前面子表達式可以出現零次或一次。要匹配?字符本身,請使用\?;
  9. .: 匹配除換行符\n之外的任何單位字符。要匹配,字符本身,請使用\.;
  10. \:用於轉義下一個字符,或指定八進制、十六進制符。要匹配\字符,請使用\\;
  11. |:指定兩項之間任選一項。要匹配|字符本身,請使用\|;

4. 預定義字符

  1. .: 可以匹配任何字符;
  2. \d:匹配0~9的所有數字;
  3. \D:匹配非數字;
  4. \s:匹配所有的空白字符,包括空格、製表符、回車符、換頁符、換行符等;
  5. \S:匹配所有的非空白字符;
  6. \w:匹配所有的單詞字符,包括0~9所有的數字、26個英文字母和下劃線(_);
  7. \W:匹配所有的非單詞字符;

5. 邊界匹配符

  1. ^: 行的開頭
  2. $: 行的結尾
  3. \b: 單詞的邊界
  4. \B: 非單詞的邊界
  5. \A: 輸入的開頭
  6. \G: 前一個匹配的結尾
  7. \Z: 輸入的結尾,僅用於最後的結束符
    8.\z: 輸入的結尾

6. 表示匹配次數的符號

下圖顯示了表示匹配次數的符號,這些符號用來確定緊靠該符號左邊的符號出現的次數:

匹配次數
                                                 匹配次數
  1. 假設我們要在文本文件中搜索美國的社會安全號碼。這個號碼的格式是999-99-9999。用來匹配它的正則表達式如圖一所示。在正則表達式中,連字符(“-”)有着特殊的意義,它表示一個範圍,比如從0到9。因此,匹配社會安全號碼中的連字符號時,它的前面要加上一個轉義字符“\”。

    連字符的轉義方式
                                                      連字符的轉義方式
  2. 假設進行搜索的時候,你希望連字符號可以出現,也可以不出現——即,999-99-9999和999999999都屬於正確的格式。這時,你可以在連字符號後面加上“?”數量限定符號,如圖所示:

    '?'表示可選
                                                                "?"表示可選
  3. 下面我們再來看另外一個例子。美國汽車牌照的一種格式是四個數字加上二個字母。它的正則表達式前面是數字部分“[0-9]{4}”,再加上字母部分“[A-Z]{2}”。下圖顯示了完整的正則表達式。

    匹配字數
                                   匹配字數

補充:正則表達式支持的數量標識符的貪婪、勉強、佔有模式

  • 貪婪模式(Greedy):數量表示符默認採用貪婪模式,除非另有表示。貪婪模式的表達式會一直匹配下去,直到無法匹配爲止。如果你發現表達式匹配的結果與預期的不符,很有可能是因爲——你以爲表達式只會匹配前面幾個字符,而實際上它是貪婪模式,所以會一直匹配下去。

  • 勉強模式(Reluctant):用問號後綴(?)表示,它只會匹配最少的字符。也稱爲最小匹配模式。

  • 佔有模式(Possessive):用加號後綴(+)表示,目前只有Java支持佔有模式。

發佈了24 篇原創文章 · 獲贊 8 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章