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

Java Discussion :

Problème Regex récursive


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut Problème Regex récursive
    Bonjour,
    J'essaye d'extraire quelques infos à partir d'un string.
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String aParser="<<qdsdqsd>>toto<<qsdqsdsqd>>titi<<sd>>";
    Pattern p=Pattern.compile("<<[a-z]+>>([a-z]+)<<[a-z]+>>");
    Matcher m=p.matcher(aParser);
    while(m.find()) {
       	System.out.println(m.group(1));
    }
    Je voudrais pouvoir récupérer tous ce qui trouve entre <<......>> et <<.....>>, le code ci-dessous retourne seulement un seul résultat (toto).

    Merci pour votre aide.

  2. #2
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bonjour,

    c'est normal:
    Si on simplifie ta chaine en pour y voir un peu plus clair, ton premier match est Du coup, tu obtiens 1.
    Ensuite, il cherche à matcher dans le reste, à savoir: Rien dedans ne correspond à ton pattern.

    Nous ne connaissons pas assez tes contraintes, donc ma suggestion peut être insuffisante, mais en me basant sur ton exemple, je chercherais simplement à récupérer ce qui se trouve entre >> et <<:

  3. #3
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut
    Bonjour Deaf,
    Merci pour ta réponse, mais j'avais entendu dire qu'il est possible de réutiliser toute la chaine à chaque match avec une regex récursive, mais je ne sais pas comment faire ça.Si t'as des idées, je suis preneur.

    CDT

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je vois pas trop ce qu'il y a de récursif là-dedans, mais bon.

    Il y a toujours moyen d'utiliser un lookahead positif. Comme ça, la regex vérifie la présence de la balise de fermeture, mais ne la consomme pas et laisse la position du flux de recherche à juste avant elle. Ce qui permet donc de la rechercher et la consommer pour la recherche suivante.

    Ça ressemblerait à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "<<machin>>(truc)(?=<<machin>>)"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Pourquoi ne pas plutôt utiliser la méthode split() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(String s : aParser.replaceAll("^(<<[a-z]+>>)", "").split("<<[a-z]+>>")) {
        System.out.println(s);
    }
    L'appel à replaceAll() permet de supprimer la première balise qui sinon fait ajouter une chaine vide au début des résultats du split.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

Discussions similaires

  1. problème regex please
    Par mariafan dans le forum Langage
    Réponses: 11
    Dernier message: 03/05/2007, 17h35
  2. [RegEx] Problème regex et caractère \
    Par Kyom dans le forum Langage
    Réponses: 2
    Dernier message: 05/04/2007, 16h07
  3. Problème regex VSFTPD
    Par goldkey dans le forum Réseau
    Réponses: 1
    Dernier message: 19/01/2007, 17h55
  4. [RegEx] Problème regex url cliquable
    Par dorian53 dans le forum Langage
    Réponses: 5
    Dernier message: 16/11/2006, 19h17
  5. [RegEx] Problème Regex PCRE
    Par raptorman dans le forum Langage
    Réponses: 6
    Dernier message: 07/07/2006, 17h23

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