为了账号安全,请及时绑定邮箱和手机立即绑定

Java写爬虫的时候,matcher.groupCount()返回为1,但是matcher

Java写爬虫的时候,matcher.groupCount()返回为1,但是matcher

撒科打诨 2019-03-13 14:15:47
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

我模仿了题意,写了测试代码,结果如下


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的结果并不能说明匹配的结果。


要执行正则表达式匹配,需要执行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)的时候我们才能获得捕获分组匹配到的内容。


查看完整回答
反对 回复 2019-04-25
  • 1 回答
  • 0 关注
  • 675 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信