I was trying to answer a question recently and while attempting to solve it, I ran into a question of my own.
Given the following code
private void regexample(){
    String x = "a3ab4b5";
    Pattern p = Pattern.compile("(\\D+(\\d+)\\D+){2}");
    Matcher m = p.matcher(x);
    while(m.find()){
        for(int i=0;i<=m.groupCount();i++){
            System.out.println("Group " + i + " = " + m.group(i));
        }
    }
}
And the output
Group 0 = a3ab4b Group 1 = b4b Group 2 = 4
Is there any straight-forward way I'm missing to get the value 3?  The pattern should look for two occurrences of (\\D+(\\d+)\\D+) back-to-back, and a3a is part of the match.  I realize I can change expression to (\\D+(\\d+)\\D+) and then look for all matches, but that isn't technically the same thing.  Is the only way to do a double search?  ie:  Use the given pattern to match the string and then search again for each count of the outer group?
I guessed that the first values were overwritten with the second, but as I'm not that great with regex, I was hoping there was something I was missing.
 
     
    