3 votes

RegExp fonctionne en perl, javascript et objective-c mais pas en java

Je suis en train de convertir du code de Javascript en Java et j'ai trouvé une expression régulière qui, en Java, ne fonctionne pas comme prévu (en utilisant la classe standard Patronage ).

Cela fonctionne bien en perl, en js et aussi en Cocoa avec NSRegularExpression.

Le reg exp est ([a-z]*) ([0-9]*) et le code java est montré ci-dessous

Il doit correspondre à deux groupes séparés par un espace, le premier groupe ne contenant que des lettres, le second que des chiffres.

public static void main(String[] args) {
Matcher matcher = Pattern.compile("([a-z]*) ([0-9]*)").matcher("hello 101");
while (matcher.find()) {
    for (int i = 0; i < matcher.groupCount(); i++) {
        System.out.println(i + ": " + matcher.group(i));
    }
}

}

Le groupe numérique n'est jamais renvoyé. Quel est le problème ?

4voto

Tim Pietzcker Points 146308

Vous terminez votre for boucle trop tôt :

for (int i = 0; i <= matcher.groupCount(); i++) {
//                ^^   
    System.out.println(i + ": " + matcher.group(i));
}

Avec deux groupes de capture, .groupCount() est de 2 :

  • .group(0) est le match entier
  • .group(1) contient le texte correspondant au premier groupe de capture
  • .group(2) contient le texte correspondant au deuxième groupe de capture

Si vous arrêtez i à 1, on n'arrive jamais au deuxième groupe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X