84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
走同样的路,发现不同的人生
我模仿了题意,写了测试代码,结果如下
String html = "<p><span>mytextvalue<br>"; Matcher m = Pattern.compile("<p><span>(.*?)<br>").matcher(html); System.out.println(m.find()); //true System.out.println(m.groupCount()); //1 System.out.println(m.group(0)); //<p><span>mytextvalue<br> 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. * * <p> Group zero denotes the entire pattern by convention. It is not * included in this count. * * <p> 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. </p> * * @return The number of capturing groups in this matcher's pattern */ public int groupCount() { return parentPattern.capturingGroupCount - 1; }
这里说得清楚,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)
的时候我们才能获得捕获分组匹配到的内容。