comment obtenir toute la sous-chaîne pour une regex donnée?

J'ai besoin d'obtenir toutes les sous-chaînes correspondant à une expression régulière, je sais que je peux probablement construire un automate pour elle, mais je suis à la recherche d'une solution plus simple.

le problème est, Matcher.find() ne retourne pas tous les résultats.

String str = "abaca";
Matcher matcher = Pattern.compile("a.a").matcher(str);
while (matcher.find()) {
   System.out.println(str.substring(matcher.start(),matcher.end()));
}

Le résultat est aba et pas aba,acaque je veux...

des idées?

EDIT:
un autre exemple: string=abaa, regex=a.*je suis l'espoir d'obtenir de l'aba,abaa,aa

p.s. si elle ne peut pas être réalisé en utilisant des expressions régulières, c'est aussi une réponse, je veux juste savoir que je ne suis pas ré-inventer la roue pour quelque chose de la langue déjà me donne...

source d'informationauteur amit