Java patterns récupération des groupes
Résolu
ga
-
ga -
ga -
Bonjour,
Je n'arrive pas à récupérer les groupes d'une chaîne : je n'obtiens que la dernière.
Je cherche la première lettre des groupes de majuscules de "ABcDEfGHi", soit A, D et G
Matcher m = Pattern.compile("^(?:([A-Z])[A-Z]*[\\.]*)*+").matcher("AB.DE.GH.");
if (m.matches()){
int findCount = 0;
do{
findCount++;
for (int i = 0; i < m.groupCount()+1; i++)
System.out.println("Find N°" + findCount + " - groupCount N°" + i + " - " + m.group(i));
}while (m.find());
}
J'obtiens :
Find N°1 - groupCount N°0 - AB.DE.GH.
Find N°1 - groupCount N°1 - G
A voir également:
- Java patterns récupération des groupes
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
Ton expression régulière est incorrecte, difficile d'expliquer tout ce qui est faux dedans, mais la plus grosse erreur est de spécifier une expression régulière pour toute la chaîne alors qu'elle doit représenter chacun des find.
Dans ton cas :
Dans ton cas :
public static void main(String...args) { String input = "ABcDEfGHi"; String regex = "([A-Z])[A-Z]*[^A-Z]*"; Matcher matcher = Pattern.compile(regex).matcher(input); for (int i=1; matcher.find(); i++) System.out.printf("%d : %s dans %s\n", i, matcher.group(1), matcher.group(0)); }
Salut,
ftp://ftp-developpez.com/cyberzoide/java/regex.pdf
Pages 17 à 23 du pdf obtenu...
Cordialement,
Dan
ftp://ftp-developpez.com/cyberzoide/java/regex.pdf
Pages 17 à 23 du pdf obtenu...
Cordialement,
Dan
En fait j'avais déjà essayé de ne donner l'expression que pour le find, mais ça ne marchait pas à causes du test if (matches()).
Pour être bien clair pour tous les lecteurs :
- matches() ne retourne true que si la chaîne testée dans son intégralité matche l'expression régulière...
- pour tester qu'une portion seulement de la chaîne matche, il faut utiliser lookingAt() qui donne la première occurrence dand la chaîne
- le find() donne l'occurrence suivante
- le groupCount() est le nombre de groupes dans l'expression régulière, il est le même pour tous les find() trouvés.
- Enfin, le printf est plus élégant que le println.
Ce qui me donne au final :
Matcher m = Pattern.compile("([A-Z])[A-Z]*[\\.]*").matcher("AB.DE.GH.");
if (m.lookingAt()){
int findCount = 0;
do{
findCount++;
for (int i = 0; i < m.groupCount()+1; i++)
System.out.printf("\nFind N°%d - group N°%d - %s", findCount, i, m.group(i));
}while (m.find());
}
Ta réponse m'a débloqué, je te remercie.