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