正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图

目录

正则表达式

底层实现

源码:

正则表达式语法

元字符(Metacharacter)-转义号

元字符-字符匹配符

元字符-选择匹配符

元字符-限定符

元字符-定位符

分组

正则表达式三个常用类

Pattern类

Matcher

PatternSyntaxException

分组、捕获、反向引用

分组

捕获

反向引用

String 类中使用正则表达式

替换功能

判断功能

分割功能


正则表达式

底层实现

matcher.find() 完成的任务 (考虑分组)

什么是分组,比如 (\d\d)(\d\d) ,正则表达式中有() 表示分组,

第 1 个()表示第 1 组,        第 2 个()表示第 2 组... 

1. 根据指定的规则 ,定位满足规则的子字符串(比如(19)(98))

2. 找到后,将 子字符串的开始的索引记录到 matcher 对象的属性 int[] groups;

        2.1 groups[0] = 0 , 把该子字符串的结束的索引+1 的值记录到 groups[1] = 4

        2.2 记录 1 组()匹配到的字符串 groups[2] = 0 groups[3] = 2

        2.3 记录 2 组()匹配到的字符串 groups[4] = 2 groups[5] = 4

        2.4.如果有更多的分组..... *

3. 同时记录 oldLast 的值为 子字符串的结束的 索引+1 的值即 35, 即下次执行 find 时,

就从 35 开始匹配

matcher.group(0) 分析

源码:

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();* }

4. 根据 groups[0]=31 和 groups[1]=35 的记录的位置,从 content 开始截取子字符串返回

就是 [31,35) 包含 31 但是不包含索引为 35 的位置

如果再次指向 find 方法.仍然安上面分析来执行

正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图_第1张图片

正则表达式语法

如果要想灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为:

  1.                         1.限定符
    1.                         2.选择匹配符
      1.                         3.分组组合和反向引用符
        1.                         4.特殊字符
          1.                         5.字符匹配符
            1.                         6.定位符

元字符(Metacharacter)-转义号

\\符号说明:在我们使用正则表达式去检索某些特殊字符的时候,

需要用到转义符号,否则检索不到结果,甚至会报错的。

提示:

在Java的正则表达式中,两个\\代表

其他语言中的一个

元字符-字符匹配符

正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图_第2张图片

正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图_第3张图片

元字符-选择匹配符

在匹配某个字符串的时候是选择性的,

即:既可以匹配这个,又可以匹配那个,这时你需要用到选择匹配符号

元字符-限定符

用于指定其前面的字符和组合项连续出现多少次

正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图_第4张图片

正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图_第5张图片

元字符-定位符

定位符, 规定要匹配的字符串出现的位置,比如在字符串的开始还是在结束的位置,

正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图_第6张图片

分组

正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图_第7张图片

正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图_第8张图片

正则表达式三个常用类

java.util.regex 包主要包括以下三个类 Pattern类、 Matcher类和     PatternSyntaxException

Pattern类

pattern对象是一个正则表达式对象。Pattern类没有公共构造方法。

要创建一个Pattern对象,调用其公共静态方法,它返回一个Pattern对象。

该方法接受一个正则表达式作为它的第一个参数,比如:Pattern r=Pattern.compile(pattern);

Matcher

Matcher对象是对输入字符串进行解释和匹配的引擎。

与Pattern类一样,Matcher也没有公共构造方法。

你需要调用 Pattern对象的 matcher方法来获得一个 Matcher对象

PatternSyntaxException

是一个非强制异常类 它表示一个正则表达式模式中的语法错误

分组、捕获、反向引用

分组

分组(\d\\d)(\d\d)

我们可以用圆括号组成一个比较复杂的匹配模式,

那么一个圆括号的部分我们可以看作是一个子表达式/一个分组。

捕获

把正则表达式中子表达式/分组匹配的内容,保存到内存中以数字编号或显式命名的组里,

方便后面引用,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,

第二个为2,以此类推。组0代表的是整个正则式

反向引用

圆括号的内容被捕获后,可以在这个括号后被使用,从而写出一个比较实用的匹配模式,

这个我们称为反向引用,这种引用既可以是在正则表达式内部,也可以是在正则表达式外部,

内部反向引用\\分组号,外部反向引用$分组号

String 类中使用正则表达式

替换功能

StringReg.java

String 类 public String replaceAll(String regex,String replacement)

判断功能

String 类 public boolean matches(String regex){} //使用 Pattern 和 Matcher 类

分割功能

String 类 public String[] split(String regex)


本章笔记是观看韩顺平的JAVA的视频和在网上找的资料 以及自己的理解总结出来的笔记希望可以帮助大家,感谢大家的耐心观看 如有错误请即使联系我 我会及时修正

你可能感兴趣的:(Java新特性,正则表达式,java,开发语言,java-ee,后端)