Java patterns récupération des groupes
Résolu/Fermé
A voir également:
- Java patterns récupération des groupes
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java décompiler - Télécharger - Langages
2 réponses
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
29 févr. 2012 à 18:46
29 févr. 2012 à 18:46
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)); }
Utilisateur anonyme
29 févr. 2012 à 18:06
29 févr. 2012 à 18:06
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
1 mars 2012 à 07:47
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());
}
1 mars 2012 à 11:18
Ta réponse m'a débloqué, je te remercie.