2021-11-08 正则表达式

matcher.find()底层源码分析:

* 1. 根据指定的规则 ,定位满足规则的子字符串(比如(19)(98))

* 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

* 2.4.如果有更多的分组.....

* 3. 同时记录 oldLast 的值为 子字符串的结束的 索引+1 的值 如 10,  即下次执行 find 时,就从 10 开始匹配

* 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] =  5 (在整个字符串中找到的末位置) ,从 整个字符串截取子字符串返回

* 就是 [0,5) 包含 0 但是不包含索引为 5 的位置

* 如果再次指向 find 方法.仍然按上面分析来执行

转义符
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ![Flask](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAW...
    极客学院Wiki阅读 12,213评论 0 3
  • 不知不觉易趣客已经在路上走了快一年了,感觉也该让更多朋友认识知道易趣客,所以就谢了这篇简介,已做创业记事。 易趣客...
    Physher阅读 8,969评论 1 2
  • 双胎妊娠有家族遗传倾向,随母系遗传。有研究表明,如果孕妇本人是双胎之一,她生双胎的机率为1/58;若孕妇的父亲或母...
    邺水芙蓉hibiscus阅读 9,108评论 0 2
  • 晴天,拥抱阳光,拥抱你。雨天,想念雨滴,想念你。 我可以喜欢你吗可以啊 我还可以喜欢你吗可以,可是你要知道我们不可...
    露薇霜凝阅读 5,030评论 1 2

友情链接更多精彩内容