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 :

Expressions regulieres en Java


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Par défaut Expressions regulieres en Java
    Bonjour

    Je voudrais recupere tous les string contenu dans un programme java et meme ceux qui peuvent etre compos2 je m'explique:


    System.out.println("test"+"eesf"+"+fdfdgd"); ici ("test"+"eesf"+"+fdfdgd")

    System.out.println("firstName: " + name.toString() + " lastName: " + new Object()); et dans ce cas la ("firstName: " + name.toString() + " lastName: " + new Object())

    J'ai definit une expression reguliere :
    Matcher match=parser.find(line, "((\"(.*)\"(.*))+(\\);|\\)\\.)(.*))");

    En gros au depart je regarde la presence d'un guillemet suivi dune suite de caractere fini par un autre guillemet. Cette expression pourra etre suivie d'une chaine quelconque, et sarretera quand elle recontrera un ). ou un );

    ). car la fonction peut en appeler une autre du style
    getOrCreateClassData("work.ListFiles").touch(80)

    et ); si par exemple cest un simple syso.

    Mon probleme est que mon expression ne me prends jamais la fin de la chaine par exemple dans ("firstName: " + name.toString() + " lastName: " + new Object())
    elle va mafficher :firstName: " + name.toString() + " lastName: "

    Pouvez vous m'aider

    Cordialement

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    le problème me sembles venir du fait que tu utilises * qui va consommer autant de caractère que possible tant que la regexp reste valide.
    Il faudrait que tu utilises *? a la place qui consomme le minimumpossible pour rendre la regexp valide.

    Par exemple pour la chaine: truc "machin" "bidule",
    - la regexp ".*" trouvera "machin" "bidule"
    - la regexp ".*?" trouvera "machin" et "bidule"

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Par défaut
    Merci tout d'abord de ta reponse, j'ai donc transformer mon expression pour obtenir:
    match=parser.find(line, "(\"(.*)\"(.*?))+(\\).|\\)");

    mais jai une erreur jobtiens:
    "class ").append((String)e.getKey()).append(" found in the following places:").

    Normalement le resultat attendu est :
    "class ").
    et ensuite
    (" found in the following places:").

    J'avoue aue je ne vois pas trop pourquoi?

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Relis attentivement mon post précédent l'explication y est.
    Tu utilises un .* entre les guillemets qui mange tout jusqu'au dernier guillemets

  5. #5
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Par défaut
    Excuse moi j'ai pas collé la bonne expression, c'est avec celle la que j'ai testé

    match=parser.find(line, "(\"(.*?)\"(.*?))+(\\).|\\)");

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ca m'étonnerais que tu aie utilisé çà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    match=parser.find(line, "(\"(.*?)\"(.*?))+(\\).|\\)")
    Parce que l'expression ne compile pas (parenthèse non balancée)

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

Discussions similaires

  1. expression reguliere en java
    Par hihi30 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 07/07/2009, 12h14
  2. Expression reguliere java
    Par steeves5 dans le forum Général Java
    Réponses: 9
    Dernier message: 03/03/2008, 11h33
  3. expression reguliere en java script
    Par 18Marie dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/06/2006, 08h36
  4. [langage] surement une expression régulière...
    Par armada dans le forum Langage
    Réponses: 5
    Dernier message: 30/05/2003, 17h06
  5. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 16h14

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