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));
        }
    }
}
相关推荐
许彰午5 小时前
14_Java泛型完全指南
java·windows·python
智慧物业老杨5 小时前
司法绿色通道下的物业纠纷数智化解决方案——基于“三优先“机制的全流程技术落地实践
java·django
2601_961194025 小时前
2026初级会计实务公式总结大全|计算题公式手册PDF
java·spring·eclipse·pdf·tomcat·hibernate
做个文艺程序员5 小时前
第1篇:K8s 核心概念精讲:Pod、Deployment、Service 与 Namespace——Java 开发者快速上手指南
java·云原生·容器·kubernetes·容器编排
小欣加油7 小时前
leetcode3751 范围内总波动值I
java·数据结构·c++·算法·leetcode
代码中介商8 小时前
C++左值与右值:核心判断法则详解
开发语言·c++
闪电悠米8 小时前
黑马点评-Redisson-01_why_redisson
java·服务器·网络·数据库·缓存·wpf
星轨zb8 小时前
LangChain4j 集成 Spring Boot:会话记忆 NPE 的根源与 ChatMemoryProvider 正确配置
java·spring boot·后端·langchain4j
JAVA9658 小时前
JAVA面试-并发篇 05-并发包AQS队列实现原理是什么
java·开发语言·面试
JAVA面经实录9178 小时前
RocketMQ全套学习知识手册
java·kafka·rabbitmq·rocketmq