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));
        }
    }
}
相关推荐
一只小松许️4 分钟前
深入理解 Rust 的内存模型:变量、值与指针
java·开发语言·rust
无限进步_26 分钟前
【C语言】寻找数组中唯一不重复的元素
c语言·开发语言·算法
A阳俊yi29 分钟前
Spring——事件机制
java·后端·spring
Fency咖啡1 小时前
Spring进阶 - SpringMVC实现原理(二)DispatcherServlet处理请求的过程
java·后端·spring·mvc
m0_651593911 小时前
位置透明性、Spring Cloud Gateway与reactor响应式编程的关系
java·spring cloud·系统架构·gateway
玉树临风江流儿2 小时前
Cmake使用CPack实现打包
java·服务器·前端
yunmi_2 小时前
微服务,Spring Cloud 和 Eureka:服务发现工具
java·spring boot·spring cloud·微服务·eureka·架构·服务发现
一叶飘零_sweeeet2 小时前
从 0 到 PB 级存储:MinIO 分布式文件系统实战指南与架构解密
java·架构·大文件存储
Dest1ny-安全2 小时前
Java代码审计-Servlet基础(1)
java·python·servlet
好开心啊没烦恼2 小时前
Python数据分析:使用爬虫从网页、社交媒体平台、论坛等公开资源提取中文和英文人名。
开发语言·爬虫·python·数据挖掘·数据分析