正則表達式之Matcher類中group方法

  • 2019 年 10 月 3 日
  • 筆記

前言

同事把一個excel表給我,裡面的數據大概有幾千的樣子吧。自己需要把裡面的數據一個一個拿出來做一個http請求,對得到的結果進行過濾,然後再寫到上面去。這是就涉及到用腳本來進行操作了,於是自己搞了一個Java的腳本出來,裡面涉及到一些正則表達式,自己雖然說會,但是一直對 Matcher類中的group方法 不太了解。網上的部落格也沒有寫的特別清楚,於是有了此文。

Pattern 和 Matcher

java.util.regex 包下

  1. Pattern(模式類) : 用來表達和陳述所要搜索模式的對象。Pattern.compile(pattern) pattern 也就是你寫的正則表達式
  2. Matcher(匹配器類):真正影響搜索的對象。上面Pattern.compile(pattern)得到一個Pattern對象 為 rr.matcher(line) line也即是你需要進行匹配的字元串 。這樣會得到一個 Matcher 的對象。
  3. PatternSyntaxException: 當遇到不合法的搜索模式時,會拋出例外。

正則表達式語法

在有的語言中,一個反斜杠 就足以具有轉義的作用,但是Java中需要兩個 \ 反斜杠。表示轉義的作用。一些字元在正則表達式中的說明,意義。詳情可查看 runoob

上程式碼

現在我的正則表達式為 (//d+)([a-z]+)(//d+)

  1. //d+ 表示最少匹配一個數字
  2. [a-z]+ 表示最少匹配一個字元
  3. 需要指定的字元串為 "123ra9040 123123aj234 adf12322ad 222jsk22"
  4. 程式碼如下 :
public static void main( String args[] ){            // 按指定模式在字元串查找          String line = "123ra9040 123123aj234 adf12322ad 222jsk22";          String pattern = "(\d+)([a-z]+)(\d+)";  //        String pattern1 = "([\u4E00-\u9FA5]+|\w+)";            // 創建 Pattern 對象          Pattern r = Pattern.compile(pattern);            // 現在創建 matcher 對象          Matcher m = r.matcher(line);          int i = 0;          // m.find 是否找到正則表達式中符合條件的字元串          while (m.find( )) {              // 拿到上面匹配到的數據              System.out.println("----i="+i);              System.out.println("Found value: " + m.group(0) );              System.out.println("Found value: " + m.group(1) );              System.out.println("Found value: " + m.group(2) );              System.out.println("Found value: " + m.group(3) );              i++;              System.out.println("|||||||");              System.out.println("");          }      }

輸出:

----i=0  Found value: 123ra9040  Found value: 123  Found value: ra  Found value: 9040  |||||||    ----i=1  Found value: 123123aj234  Found value: 123123  Found value: aj  Found value: 234  |||||||    ----i=2  Found value: 222jsk22  Found value: 222  Found value: jsk  Found value: 22  |||||||
  1. group(0) 對應著 ((//d+)([a-z]+)(//d+)) 123ra9040
  2. group(2) 輸出的數據 是 group(0)中所匹配的數據 也就是([a-z]+) 匹配到是數據 ra
  3. group(3) 輸出的數據 是 group(0)中所匹配的數據 也就是(//d+) 匹配到是數據 9040

總結

  1. Matcher 類中group(0) 表示正則表達式中符合條件的字元串。
  2. Matcher 類中 group(1) 表示正則表達式中符合條件的字元串中的第一個() 中的字元串。
  3. Matcher 類中 group(2) 表示正則表達式中符合條件的字元串中的第二個() 中的字元串。
  4. Matcher 類中 group(3) 表示正則表達式中符合條件的字元串中的第三個() 中的字元串。
  5. 如果不明白,我相信看程式碼會很明白的。