day50-正则表达式01( 四 )

在源码中,返回语句 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

文章插图
小结:
  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正则表达式默认是区分大小写的,如何实现不区分大小写?
    • (?i)abc表示abc都不区分大小写
    • a(?i)bc表示bc不区分大小写
    • a((?i)b)c表示只有b不区分大小写
    • Pattern pattern = Pattern.compile(regStr,Pattern.CASE_INSENSITIVE);
  3. [^a-z]说明:
    [^a-z]表示可以匹配不是a-z中的任意一个字符
    [^A-Z]表示可以匹配不是A-Z中的任意一个字符
    [^0-9]表示可以匹配不是0-1中的任意一个字符
    如果用 [^a-z]去匹配“a11c8”会得到什么结果?结果:1、1、8
    用 [^a-z]{2}又会得到什么结果?结果是:11

    经验总结扩展阅读