day50-正則表達式01( 三 )

以上面的代碼為例:

  • match.find():
  1. 根據指定的規則,定位滿足規則的子字符串(比如"1998")
2.1找到后,將"1998"子字符串開始的索引記錄到 matcher對象的屬性 int[] groups數組中
?groups[0]=0 ;把該子串的結束索引+1的值記錄到 groups[1] = 4
2.2 記錄第一組括號()匹配到的字符串("19")的位置 : groups[2]=0 , groups[3]=2
2.3 記錄第二組括號()匹配到的字符串("98")的位置 : groups[4]=2 , groups[5]=4
如果有更多的分組就以此類推
下標從0開始
驗證:
在程序中打上斷點 , 點擊debug調試:
day50-正則表達式01

文章插圖
可以看到剛開始時,groups數組的所有值都是-1
day50-正則表達式01

文章插圖
點擊step over , 可以看到groups數組的變化如下:
day50-正則表達式01

文章插圖
//源碼:public String group(int group) {if (first < 0)throw new IllegalStateException("No match found");if (group < 0 || group > groupCount())throw new IndexOutOfBoundsException("No group " + group);if ((groups[group*2] == -1) || (groups[group*2+1] == -1))return null;return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();}在源碼中,返回語句 return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();
中,[group * 2] 和 [group * 2 + 1]計算的就是groups數組的位置
如果我們想要取出第一組括號匹配的子字符串,即groups下標為[2]和[3],只需要將傳入的參數改為1即可
groups[1 * 2]=groups[2] , groups[1 * 2 + 1]=groups[3]
取出第二組括號匹配的字符串同理 , 將傳入的參數改為2即可
groups[2 * 2]=groups[4] , groups[2 * 2 + 1]=groups[5]

day50-正則表達式01

文章插圖
【day50-正則表達式01】小結:
  1. 如果正則表達式有括號(),即分組
  2. 取出匹配的字符串規則如下:
  3. matcher.group(0) 表示匹配到的子字符串
  4. matcher.group(1) 表示匹配到的子字符串的第1組字串
  5. matcher.group(2) 表示匹配到的子字符串的第2組字串
  6. 以此類推,注意分組的數不能越界
5.4正則表達式語法
  • 基本介紹
    如果想要靈活地運用正則表達式 , 必須了解其中各種元字符(Metacharacter)的功能,元字符從功能上大致分為:
    1. 限定符
    2. 選擇匹配符
    3. 分組組合和反向引用符
    4. 特殊字符
    5. 字符匹配符
    6. 定位符
5.4.1元字符-轉義符 \\\\符號的說明:在我們使用正則表達式去檢索某些特殊字符時,需要用到轉義符號\\,否則檢索不到結果,甚至會報錯 。
注意:在Java的正則表達式中,兩個\\表示其他語言中的一個\
需要用到轉義符號的字符有如下:
. * + () $ / \ ? [] ^ {}
例子:
package li.regexp;import java.util.regex.Matcher;import java.util.regex.Pattern;//演示轉義字符的使用public class RegExp02 {public static void main(String[] args) {String content = "abc$(a.bc(123(";//匹配 ( ==> \\(//匹配 ( ==> \\.//String regStr = "\\(";String regStr = "\\.";Pattern pattern = Pattern.compile(regStr);Matcher matcher = pattern.matcher(content);while (matcher.find()) {System.out.println("找到:" + matcher.group(0));}}}
day50-正則表達式01

文章插圖
day50-正則表達式01

文章插圖
5.4.2元字符-字符匹配符
day50-正則表達式01

文章插圖

day50-正則表達式01

文章插圖
  • 應用實例
  1. [a-z]說明:
    [a-z]表示可以匹配 a-z 之間任意的一個字符
    [A-Z] 表示可以匹配 A-Z 之間任意的一個字符
    [0-9] 表示可以匹配 0-9 之間任意的一個字符
    比如[a-z]、[A-Z]去匹配“a11c8”會得到什么結果?結果是:a、c
  2. java正則表達式默認是區分大小寫的,如何實現不區分大小寫?