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

Langage PHP Discussion :

Réduire la selection d'une expression régulière [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 46
    Points : 21
    Points
    21
    Par défaut Réduire la selection d'une expression régulière
    Salut,

    Voilà un exemple de document que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <text>
    <b>blabla</b>
    <b>textes blibli textes</b>
    </text>
    Je souhaites simplement extraire le noeud qui contient blibli (et peut être autre chose ...).

    J'ai donc une expression de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "#<b>(.*)blibli(.*)</b>#sm"
    Seulement, dans mon exemple, il va englober les deux balisese [b], et je vais récupérer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <b>blabla</b>
    <b>textes blibli textes</b>
    Y a t-il des solutions à ce problème ?

    Merci beaucoup !

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    C'est basique, mais peut-être suffisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reg = "#<b>([^<>]*)blibli([^<>]*)</b>#sm"

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Salut,

    Merci pour ta piste !

    Malheureusement non car il doit pouvoir y avoir des balises entre les <b></b> à extraire .

    Ne serait-il pas possible d'utiliser ta méthode mais pour eclure la chaine "<b>" dans son ensemble ?

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Un truc dans ce genre pourrait être une piste
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    $str = <<< EOT
    <text>
    <b>blabla</b>
    <b>textes blibli textes</b>
    </text>
    EOT;
     
    $reg = '#<b> ((?:.(?!<b>))*) (blibli) ((?:.(?!<b>))*) </b>#xs';
     
    preg_match($reg, $str, $match);
    print_r($match);

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup, ça fait exactement ce que j'attends ! Toi et les regex, ça fait vraiment un


    Par contre, j'aimerais bien avoir quelques explications, si jamais tu as le temps bien sur !

    Ca concerne cette partie :

    Alors, j'ai bien compris que ?: sert à ne pas capturer la parenthèse? Par contre, à quoi sert le point juste après ?

    merci beaucoup en tout cas !

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Le point répresentant n'importe quel caractère, le motif suivant se traduit par "n'importe quel caractère qui n'est pas suivi d'une balise <b>"
    Et par extension, pour tous les caractères qui ne sont pas suivis par <b>, nous aurons :
    Motif auquel on peu ajouter les modificateurs de "non-capture"
    C'est mieux ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Vu sous cet angle, en effet

    Merci vraiment pour ton coup de main, c'est vraiment très sympa !

    Hop, je met en résolu !

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

Discussions similaires

  1. [EXP] Evaluation dans une expression régulière
    Par SergentHeinz dans le forum Langage
    Réponses: 7
    Dernier message: 10/11/2005, 18h17
  2. Une expression réguliére
    Par BRAUKRIS dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/09/2005, 20h14
  3. Réponses: 6
    Dernier message: 17/08/2005, 12h38
  4. Problème sur une expression régulière
    Par Verbal-Quint dans le forum Langage
    Réponses: 6
    Dernier message: 12/11/2004, 10h54
  5. [Regex] Vérifier qu'une chaîne respecte une expression régulière
    Par PeteMitchell dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 13/05/2004, 14h22

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