Search code examples
javaregexregex-group

java.util.regex.Matcher confused group


I'm having trouble getting the right group of a regex match. My code boils down to following:

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

I expect the output to be:

2
test
20110101_0000

However its:

2
test_test_test_test_20110101_0000.xml
test

Does anyone have an explanation?


Solution

  • Group(0) is the whole match, and group(1), group(2), ... are the sub-groups matched by the regular expression.
    Why do you expect "test" to be contained in your groups? You didn't define a group to match test (your regex contains only the group \d*_\d*).