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

avec Java Discussion :

Expression régulière - Récupérer la valeur entre 2 balises


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 84
    Points : 50
    Points
    50
    Par défaut Expression régulière - Récupérer la valeur entre 2 balises
    Bonjour,

    j'aimerais savoir s'il est possible de récupérer la valeur comprise entre 2 balises <li> avec une expression régulière.

    Avec un ".*?<li> j'arrive à récupérer tous les <li> de mon fichier mais je ne sais pas comment récupérer la valeur après la balise.

    Merci.

  2. #2
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    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 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Il faut recourir aux groupes de capture les groupe entre parenthèse dans le pattern sont numérotés. On peut les consulter via la méthode group du Matcher

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Pattern p = Pattern.compile("<li>(.*?)</li>");
            Matcher m = p.matcher("<li>1er</li><li>2eme</li><li>3eme</li>");
            while (m.find()) {
                System.out.println(m.group(1));
            }
    Attention tout de même les imbrications de balises ne seront pas gérées, et je doute que ce soit faisable simplement avec les expressions régulières.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 84
    Points : 50
    Points
    50
    Par défaut
    Merci cela fonctionne bien sur un fichier texte d'une seule ligne.

    Par contre si j'ai un fichier avec :
    <li>
    blabla
    </li>

    Cela ne fonctionne pas. Est-il possible d'avoir une expression réguliere qui recherche le pathern sur plusieurs lignes ?

    Merci.

  4. #4
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    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 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Il suffit de le préciser en paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern p = Pattern.compile("<li>(.*?)</li>",Pattern.MULTILINE);

  5. #5
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    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 562
    Points : 15 493
    Points
    15 493
    Par défaut
    En fait j'ai dit une bêtise.
    Le paramètre MULTILINE ne modifie le comportement que de ^ et $. Pour que le point porte sur plusieurs lignes, il faut utiliser le paramètre DOTALL.

    Ceci dit, les retours charriot et les éventuels espaces/tab d'indentation seront aussi lus dans le groupe de capture il faudrait plutot utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Pattern p = Pattern.compile("<li>\\s*(.*?)\\s*</li>");

  6. #6
    Membre du Club
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 40
    Points : 42
    Points
    42
    Par défaut
    Sinon, si tu cherche à parser un fichier XML il y a aussi la bonne vieille méthode du parseur SAX qui t'analyse tout les différentes balise de ton fichier etc...


    Moufasa

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/11/2012, 14h15
  2. Expression réglière : Récupérer la valeur d'une balise xml
    Par ziad.shady dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 16/07/2012, 13h59
  3. Récupérer la valeur entre 2 balises en utilisant Regex
    Par new123 dans le forum Général Java
    Réponses: 5
    Dernier message: 08/04/2011, 10h38
  4. Récupérer valeur entre des balises script
    Par lirycs78 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/10/2010, 14h07
  5. [Balise XML] Comment récupérer le contenu entre 2 balise?
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/03/2004, 16h36

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