84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
走同样的路,发现不同的人生
我模仿了题意,写了测试代码,结果如下
String html = "mytextvalue"; Matcher m = Pattern.compile("(.*?)").matcher(html); System.out.println(m.find()); //true System.out.println(m.groupCount()); //1 System.out.println(m.group(0)); //mytextvalue System.out.println(m.group(1)); //mytextvalue
mytextvalue"; Matcher m = Pattern.compile("(.*?)").matcher(html); System.out.println(m.find()); //true System.out.println(m.groupCount()); //1 System.out.println(m.group(0)); //mytextvalue System.out.println(m.group(1)); //mytextvalue
(.*?)").matcher(html); System.out.println(m.find()); //true System.out.println(m.groupCount()); //1 System.out.println(m.group(0)); //mytextvalue System.out.println(m.group(1)); //mytextvalue
mytextvalue System.out.println(m.group(1)); //mytextvalue
另外
// where does m.groupCount come from m = Pattern.compile("(group1)(group2)(group3)").matcher(html); System.out.println(m.groupCount()); //3
增加解释说明,看源码的注释
/** * Returns the number of capturing groups in this matcher's pattern. * * Group zero denotes the entire pattern by convention. It is not * included in this count. * * Any non-negative integer smaller than or equal to the value * returned by this method is guaranteed to be a valid group index for * this matcher. * * @return The number of capturing groups in this matcher's pattern */ public int groupCount() { return parentPattern.capturingGroupCount - 1; }
Group zero denotes the entire pattern by convention. It is not * included in this count. * *
Any non-negative integer smaller than or equal to the value * returned by this method is guaranteed to be a valid group index for * this matcher.
这里说得清楚,groupCount返回的是正则表达式的捕获分组的数量(捕获分组和非捕获分组是另外的知识点),groupCount的结果并不能说明匹配的结果。
groupCount
要执行正则表达式匹配,需要执行find动作,看源码
find
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); }
这样的才会给Matcher内部的成员变量groups赋值,groups[i] = -1;这样的之后在我们执行m.group(1)的时候我们才能获得捕获分组匹配到的内容。
Matcher
groups
groups[i] = -1;
m.group(1)
我模仿了题意,写了测试代码,结果如下
另外
增加解释说明,
看源码的注释
这里说得清楚,
groupCount
返回的是正则表达式的捕获分组的数量(捕获分组和非捕获分组是另外的知识点),groupCount
的结果并不能说明匹配的结果。要执行正则表达式匹配,需要执行
find
动作,看源码这样的才会给
Matcher
内部的成员变量groups
赋值,groups[i] = -1;
这样的之后在我们执行
m.group(1)
的时候我们才能获得捕获分组匹配到的内容。