java.util.regex.Matcher组

java.util.regex.Matcher组,java,regex,matcher,regex-group,Java,Regex,Matcher,Regex Group,我很难找到正则表达式匹配的正确组。我的代码可以归结为以下几点: Pattern fileNamePattern = Pattern.compile("\\w+_\\w+_\\w+_(\\w+)_(\\d*_\\d*)\\.xml"); Matcher fileNameMatcher = fileNamePattern.matcher("test_test_test_test_20110101_0000.xml"); System.out.println(fileNameMatcher.grou

我很难找到正则表达式匹配的正确组。我的代码可以归结为以下几点:

Pattern fileNamePattern = Pattern.compile("\\w+_\\w+_\\w+_(\\w+)_(\\d*_\\d*)\\.xml");
Matcher fileNameMatcher = fileNamePattern.matcher("test_test_test_test_20110101_0000.xml");

System.out.println(fileNameMatcher.groupCount());

if (fileNameMatcher.matches()) {
    for (int i = 0; i < fileNameMatcher.groupCount(); ++i) {
        System.out.println(fileNameMatcher.group(i));
    }
}
然而,它:

2
test_test_test_test_20110101_0000.xml
test

有人有解释吗?

第0组是整场比赛。真正的组从1开始,即您需要:

System.out.println(fileNameMatcher.group(i + 1)); 

第0组是整场比赛。真正的组从1开始,即您需要:

System.out.println(fileNameMatcher.group(i + 1)); 
  • 组(0)
    应该是整个匹配(“test\u test\u test\u test\u 20110101\u 0000.xml”)
  • 组(1)
    应该是正则表达式中唯一的捕获组(“20110101_0000”)
这就是我得到的。我不明白为什么
组(1)

  • 组(0)
    应该是整个匹配(“test\u test\u test\u test\u 20110101\u 0000.xml”)
  • 组(1)
    应该是正则表达式中唯一的捕获组(“20110101_0000”)
这就是我得到的。我很困惑,为什么你会得到一个不同的值,组(1)

组(0)是整个匹配,组(1),组(2)。。。是正则表达式匹配的子组。
为什么您希望“测试”包含在您的组中?您没有定义要匹配测试的组(您的正则表达式只包含组\d*\ud*)。

组(0)是整个匹配,组(1),组(2)。。。是正则表达式匹配的子组。

为什么您希望“测试”包含在您的组中?你没有定义一个组来匹配测试(你的正则表达式只包含组\d*\ud*)。

实际上你的for循环应该包括groupCount(),使用“实际上你的for循环应该包括groupCount(),使用“Thank I got now:”)很抱歉我在代码中忘记了一些括号,请看我的编辑。谢谢我现在收到了:)很抱歉我的代码中忘记了一些括号,请看我的编辑。非常感谢!没有意识到默认行为。非常感谢!没有意识到默认行为。非常感谢!我没有意识到默认行为。是的,我的代码中缺少了一对括号,只是为了正确性编辑了它。非常感谢!是的,我的代码中遗漏了一对括号,只是为了正确性而编辑了它。
for (int i = 0; i <= fileNameMatcher.groupCount(); ++i) {
    System.out.println(fileNameMatcher.group(i));
}
2
test_test_test_test_20110101_0000.xml
test
20110101_0000