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 :

Java et regExp


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut Java et regExp
    Bonjour,

    Je veux faire une regExp afin de pouvoir extraire d'un chaine de caracteres qui n'a pas toujours la meme taille des informations.

    Exemple de chaine : Waaaa$Csasas$PasasasaQ/sasas

    Le texte en minuscule dans l'exemple étant les chaines que je souhaite récupérer.

    j'ai fait cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Pattern p = Pattern.compile("^WQL([\w])\$C([\w])\$P([\w])Q/\$([\w])$");
    		Matcher m = p.matcher(sCmd);
     
    		if( m.matches())
    			   for(int i= 0; i<= m.groupCount(); ++i)
    			      System.out.println("\n"+"groupe "+i+" :"+m.group(i));

    Mais eclipse n'accepte pas la regExp qui me semble pourtant juste...
    Donc ca aboutit a cela qui ne donne rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Pattern p = Pattern.compile("^WQL([a-zA-Z0-9])$C([a-zA-Z0-9])$P([a-zA-Z0-9])Q/$([a-zA-Z0-9])$");
    		Matcher m = p.matcher(sCmd);
     
    		if( m.matches())
    			   for(int i= 0; i<= m.groupCount(); ++i)
    			      System.out.println("\n"+"groupe "+i+" :"+m.group(i));

    Auriez-vous une idée ?

    Merci d'avance !!

  2. #2
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    Salut,
    j'ai pas testé ton regexp, mais c'est normal qu'eclipse n'accepte pas, il faudrait aussi échapper le "\", donc, il faudrait plutôt mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern p = Pattern.compile("^WQL([\\w])\\$C([\\w])\\$P([\\w])Q/\\$([\\w])$");
    Teste ceci, et si ça ne marche pas toujours, on disséquera ta regexp

  3. #3
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    J'ai tjrs pas de retour ....

    Voila la chaine que je souhaite manpuler : WQLTTE$CBAPC$PPPNDY$Q/DASKJD

    Il faudrait que je puisse récupérer TTE, BAPC, PPNDY et DASKJD


    Merci !

  4. #4
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    Salut,
    d'abord est-ce que t'as tjrs un probleme avec eclipse, ou bien il accepte la regexp?
    Réponds stp, pour ma part, je regarde ce que je peux faire.

  5. #5
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    Non j'ai plus de souci mais pas de resultats par contre

  6. #6
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Salut,
    Utilises cette RegExp
    WQL(.*?)\\$C(.*?)\\$P(.*?)\\$Q/(.*?)

  7. #7
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,



    En plus du problèmes des doubles-antislash, ta regexp n'est toujours pas correcte pour ce que tu veux :

    • ([\\w]) représente un seul et unique caractère... il faudrait rajouter un + pour indiquer qu'il peut y en avoir plusieurs. De plus les crochet [] sont inutile... à remplacer par (\\w+)
    • Il y a un $Q/ dans ta chaine, et ta regexp attent un Q/$...



    Un conseil : les regexp sont très complexe et difficile lire. Je te conseillerais de les découper en petite partie commenté plus facile à lire. Par exemple dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	final String MOT = "(\\w+)"; // Un mot à rechercher...
     
    	Pattern p = Pattern.compile( "^" // début de chaine
    			+ "WQL" + MOT	// WQL + mot
    			+ "\\$C" + MOT	// $C + mot
    			+ "\\$P" + MOT	// $P + mot
    			+ "\\$Q/" + MOT	// $Q/ + mot
    			+ "$");			// fin de chaine
    C'est quand même plus facile à lire et débugger que ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern p = Patter.compile("^WQL(\\w+)\\$C(\\w+)\\$P(\\w+)\\$Q/(\\w+)$");
    a++

  8. #8
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    Salut,
    Voilà, ça marche à merveille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern p = Pattern.compile("^WQL([\\w]+)\\$C([\\w]+)\\$P([\\w]+)\\$Q/([\\w]+)$");
    Le \w veut dire un caratère d'un mot, et non pas un mot entier, d'où l'utilisation du +.
    et remarque ceci, dans la chaine à manipuler, WQLTTE$CBAPC$PPPNDY$Q/DASKJD, tu mettais le $ avant le Q, mais dans ton pattern, tu mets le $ après le Q ( Q/\$ ).
    Donc, j'ai testé sur la chaine "WQLTTE$CBAPC$PPPNDY$Q/DASKJD", et voilà le résultat que j'ai obtenu
    java TestRegexp WQLTTE$CBAPC$PPPNDY$Q/DASKJD

    groupe 0 :WQLTTE$CBAPC$PPPNDY$Q/DASKJD

    groupe 1 :TTE

    groupe 2 :BAPC

    groupe 3 PNDY

    groupe 4 ASKJD
    Est-ce que ça te convient ??

  9. #9
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    Merci beaucoup !!

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

Discussions similaires

  1. Bug bizarre dans java.util.regexp
    Par LodeRunner64 dans le forum Collection et Stream
    Réponses: 0
    Dernier message: 20/05/2009, 16h05
  2. [Java][Regexp] Pattern spécial.
    Par Maya_vega dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 05/04/2007, 20h09
  3. package regexp de java
    Par hasnaouiwafa dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 03/03/2007, 11h18
  4. regexp et java
    Par florentB dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 06/02/2007, 15h39
  5. [RegExp] Adapter une regexp Perl vers du Java
    Par GLDavid dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 22/12/2005, 12h40

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