IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

problème de capture dans une expression régulière


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 55
    Points
    55
    Par défaut problème de capture dans une expression régulière
    Bonjour,
    Je souhaite capturer une donnée dans un String. Je sais, c'est un sujet récurrent, toussa, toussa, mais je ne trouve pas de solution avec les parenthèses qui doivent servir de groupe de capture.
    Donc mon problème : j'ai une chaine de caractère qui contient des lettres, des espaces, des chiffres, et dans le lot, ceci "departement456", ou 456 peut être n'importe quel entier positif (mon but est de récupérer le 456 en question)
    J'ai donc construit l'expression régulière suivante avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
                   // compilation de la regex
    		Pattern p = Pattern.compile("departement(\\d+)");
    		// création d’un moteur de recherche
    		Matcher m = p.matcher("dxu 789645 00000123        departement456                 001      ");
    		// lancement de la recherche de toutes les occurrences
    		boolean b = m.matches();
    		// si recherche fructueuse
    		if(b) {
    			// pour chaque groupe
    			for(int i=0; i<=m.groupCount(); i++) {
    				// affichage de la sous-chaîne capturée
    				System.out.println("Groupe " + i + " : " + m.group(i));
    			}
    		}
    		while(m.find()){
    			System.out.println(m.group());
    		}
    En fait, le matches renvoie toujours faux. En revanche, le find fonctionne, j'obtient la trace suivante :
    La capture par parenthèse ne fonctionne pas apparemment. Je suppose que mon expression régulière est mal construite, mais je ne vois pas où...
    J'ai essayé "departement(\\d*)" également, mais ça ne change rien
    J'attends vos conseils donc.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Le matches() sert uniquement à vérifier que la totalité de la chaine correspondent bien au pattern, ce qui n'est pas du tout ton cas !


    Bref dans ce cas précis il ne te sert à rien et tu peux t'en passer. Le find() correspond exactement à ce que tu veux (rechercher un pattern dans une chaine).

    a++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 55
    Points
    55
    Par défaut
    Je vois, merci beaucoup !
    Cependant il me manque encore une chose pour solutionner totalement mon problème : la capture du nombre. le find ne me retourne pas QUE le nombre comme je le souhaite (et c'est ce que je suis en droit d'attendre puisque dans mon expression régulière, seul le nombre est entre parenthèse...)
    Arrête moi si je me trompe
    En tous les cas merci de te pencher sur mon cas

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Tu peux utiliser group(int) même avec le find(), comme tu l'as fait dans le if du matches()

    a++

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 55
    Points
    55
    Par défaut
    parfait. m.group(1) me retourne le résultat escompté, mon expression était donc correcte, c'était juste que je ne savais pas bien l'utiliser.... Honte à moi, longue vie à toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2010, 10h39
  2. Réponses: 5
    Dernier message: 31/08/2006, 13h34
  3. Parenthèses dans une expression régulière
    Par papyreno dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 10/05/2006, 16h28
  4. [EXP] Evaluation dans une expression régulière
    Par SergentHeinz dans le forum Langage
    Réponses: 7
    Dernier message: 10/11/2005, 18h17
  5. Réponses: 6
    Dernier message: 17/08/2005, 12h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo