java 正则表达式捕获组

2022-09-01 23:19:04

我试图使用java expr捕获:之后的正确部分,但在下面的代码中,打印的捕获组是整个字符串,有什么问题?

String s ="xyz: 123a-45";   
String patternStr="xyz:[ \\t]*([\\S ]+)";
Pattern p = Pattern.compile(patternStr);
Matcher m = p.matcher(s);
//System.err.println(s);
if(m.find()){
    int count = m.groupCount();
    System.out.println("group count is "+count);
    for(int i=0;i<count;i++){
        System.out.println(m.group(i));
    }
}

答案 1

子组的编号以 1 开头,0 是全文。只需使用循环直到count+1即可。


答案 2

这是因为组的索引以 1 开头。组 0 是整个模式。

来自JavaDoc:“捕获组从左到右索引,从一个开始。组零表示整个模式,因此表达式 m.group(0) 等效于 m.group()。”在此处查看更多内容