Java高级Day54-正则表达式底层实现

140.正则表达式

正则表达式底层实现

**介绍:**一个正则表达式,就是用某种模式去匹配字符串的一个公式

复制代码
public class TestJava {
    public static void main(String[] args) {
        String content = "11943wd2342drwf4235";
​
        //目标:匹配所有四个数组
        //1、\\d表示一个任意的数字
        String regStr = "\\d\\d\\d\\d";
        String regStr2 = "(\\d\\d)(\\d\\d)";
        //2.创建模式对象
        Pattern pattern = Pattern.compile(regStr);
        //3.创建匹配器
        //说明:创建匹配器matcher,按照正则表达式的规则去匹配 content字符串
        Matcher matcher = pattern.matcher(content);
​
        //4.开始匹配
        /**
         *
         * matcher.find() 完成的任务 (考虑分组)
         * 什么是分组,比如(\d\d)(\d\d),小括号就是分组
         *
         * 1.根据指定的规则,定位满足条件的子字符串(比如1998)
         * 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
         * 3.同时记录oldLast 的值为 子字符串的结束的索引+1的值 即4,即下次执行find的方法时,从4开始
         *
         * 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();
         *     }
         *  1.根据 groups[0]=0 和 groups[1]=4 的记录的位置,从content开始截取子字符串返回
         *  就是[0,4)
         */
        while (matcher.find()) {
            //小结
            //1.如果正则表达式有() 即分组
            //2.取出匹配的字符串规则如下
            //3.group(0) 表示匹配到的字符串
            //4.group(1) 表示匹配到的字符串的第一组字串
            //4.group(2) 表示匹配到的字符串的第二组字串
            System.out.println("找到:" + matcher.group(0));
            System.out.println("第1组()匹配到的值=" + matcher.group(1));
            System.out.println("第2组()匹配到的值=" + matcher.group(2));
        }
    }
}
相关推荐
d***81727 分钟前
解决SpringBoot项目启动错误:找不到或无法加载主类
java·spring boot·后端
p***43488 分钟前
Rust网络编程模型
开发语言·网络·rust
ᐇ95920 分钟前
Java集合框架深度实战:构建智能教育管理与娱乐系统
java·开发语言·娱乐
梁正雄1 小时前
1、python基础语法
开发语言·python
强化学习与机器人控制仿真1 小时前
RSL-RL:开源人形机器人强化学习控制研究库
开发语言·人工智能·stm32·神经网络·机器人·强化学习·模仿学习
听风吟丶1 小时前
MyBatis 深度实战:从基础映射到企业级性能优化
java·tomcat
百***48071 小时前
【Golang】slice切片
开发语言·算法·golang
q***92511 小时前
Windows上安装Go并配置环境变量(图文步骤)
开发语言·windows·golang
仟濹2 小时前
【Java 基础】面向对象 - 继承
java·开发语言
6***83052 小时前
微服务搭建----springboot接入Nacos2.x
java