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

打印 上一主题 下一主题

主题 1604|帖子 1604|积分 4812

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
140.正则表达式

正则表达式底层实现

介绍:一个正则表达式,就是用某种模式去匹配字符串的一个公式
  1. public class TestJava {
  2.    public static void main(String[] args) {
  3.        String content = "11943wd2342drwf4235";
  4.        //目标:匹配所有四个数组
  5.        //1、\\d表示一个任意的数字
  6.        String regStr = "\\d\\d\\d\\d";
  7.        String regStr2 = "(\\d\\d)(\\d\\d)";
  8.        //2.创建模式对象
  9.        Pattern pattern = Pattern.compile(regStr);
  10.        //3.创建匹配器
  11.        //说明:创建匹配器matcher,按照正则表达式的规则去匹配 content字符串
  12.        Matcher matcher = pattern.matcher(content);
  13.        //4.开始匹配
  14.        /**
  15.         *
  16.         * matcher.find() 完成的任务 (考虑分组)
  17.         * 什么是分组,比如(\d\d)(\d\d),小括号就是分组
  18.         *
  19.         * 1.根据指定的规则,定位满足条件的子字符串(比如1998)
  20.         * 2.找到后,将子字符串的开始索引记录到 matcher对象的属性 int[] groups
  21.         *   2.1 groups[0] = 0 ,把该字符串的结束的索引+1的值记录到 groups[1] = 4
  22.         *   2.2 记录1组()匹配到的字符串 groups[2] = 0 groups[3] = 2
  23.         *   2.3 记录2组()匹配到的字符串 groups[4] = 2 groups[5] = 4
  24.         * 3.同时记录oldLast 的值为 子字符串的结束的索引+1的值 即4,即下次执行find的方法时,从4开始
  25.         *
  26.         * matcher.group(0)
  27.         *
  28.         * 源码:
  29.         * public String group(int group) {
  30.         *         if (first < 0)
  31.         *             throw new IllegalStateException("No match found");
  32.         *         if (group < 0 || group > groupCount())
  33.         *             throw new IndexOutOfBoundsException("No group " + group);
  34.         *         if ((groups[group*2] == -1) || (groups[group*2+1] == -1))
  35.         *             return null;
  36.         *         return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();
  37.         *     }
  38.         *  1.根据 groups[0]=0 和 groups[1]=4 的记录的位置,从content开始截取子字符串返回
  39.         *  就是[0,4)
  40.         */
  41.        while (matcher.find()) {
  42.            //小结
  43.            //1.如果正则表达式有() 即分组
  44.            //2.取出匹配的字符串规则如下
  45.            //3.group(0) 表示匹配到的字符串
  46.            //4.group(1) 表示匹配到的字符串的第一组字串
  47.            //4.group(2) 表示匹配到的字符串的第二组字串
  48.            System.out.println("找到:" + matcher.group(0));
  49.            System.out.println("第1组()匹配到的值=" + matcher.group(1));
  50.            System.out.println("第2组()匹配到的值=" + matcher.group(2));
  51.        }
  52.    }
  53. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表