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正则表达式默认是区分大小写的,如何实现不区分大小写?