正则表达式 - Java写爬虫的时候,matcher.groupCount()返回为1,但是matcher.group(1)却抛异常
怪我咯
怪我咯 2017-04-18 10:08:41
0
1
428

怪我咯
怪我咯

走同样的路,发现不同的人生

reply all (1)
Ty80

I imitated the meaning of the question and wrote the test code. The results are as follows

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

Also

// where does m.groupCount come from m = Pattern.compile("(group1)(group2)(group3)").matcher(html); System.out.println(m.groupCount()); //3

Add explanation,
see the source code comments

/** * 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; }

It is clear here that the result ofgroupCount返回的是正则表达式的捕获分组的数量(捕获分组和非捕获分组是另外的知识点),groupCountdoes not indicate the result of the match.

To perform regular expression matching, you need to perform thefindaction, see the source code

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); }

This will assign a value to the member variablegroupsinsideMatcher,groups[i] = -1;Matcher内部的成员变量groups赋值,groups[i] = -1;
这样的之后在我们执行m.group(1)After we execute thism.group(1)Only when we get the content matched by the capture group.

    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template
    About us Disclaimer Sitemap
    php.cn:Public welfare online PHP training,Help PHP learners grow quickly!