public boolean find() { int nextSearchIndex = last; if (nextSearchIndex == first) nextSearchIndex++; // If next search starts before region, start it at region if (nextSearchIndex < from) nextSearchIndex = from; // If next search starts beyond region then it fails if (nextSearchIndex > to) { for (int i = 0; i < groups.length; i++) groups[i] = -1; return false; } return search(nextSearchIndex); }
我模仿了题意,写了测试代码,结果如下
另外
增加解释说明,
看源码的注释
这里说得清楚,
groupCount
返回的是正则表达式的捕获分组的数量(捕获分组和非捕获分组是另外的知识点),groupCount
的结果并不能说明匹配的结果。要执行正则表达式匹配,需要执行
find
动作,看源码这样的才会给
Matcher
内部的成员变量groups
赋值,groups[i] = -1;
这样的之后在我们执行
m.group(1)
的时候我们才能获得捕获分组匹配到的内容。