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 :

Souci avec l'interprétation du regexp


Sujet :

Langage PHP

  1. #1
    Membre chevronné
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Novembre 2004
    Messages
    1 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 284
    Points : 2 160
    Points
    2 160
    Par défaut Souci avec l'interprétation du regexp
    Bonjour,

    Je post un message car j'ai une expression régulière avec laquelle je n'arrive pas à me dépatouiller.

    J'ai un texte d'entrée : <P>{QUARTZ GT C1}</P>
    J'utilise cette expression : #{.+}#i
    Le Résultat est bien : {QUARTZ GT C1}

    Jusque la tout va bien mais cela ce corse lorque j'ai un texte d'entrée qui ressemble à cela :
    <P>{QUARTZ GT P1}</P><P>{QUARTZ GT P2}</P>

    La l'expression régulière me donne :
    {QUARTZ GT P1}</P><P>{QUARTZ GT P2}

    Comment pourrais t-on faire pour lui indiquer de s'arrêter à la première accolade et non pas à la dernière accolade pour que j'obtienne un tableau comportant les deux éléments.

    Merci pour votre aide.
    Stéphane.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Au choix :

    #{.+}#iU

    Le U rendra ta regex ungreedy (moins gourmande). Elle s'arrêtera à la première accolade trouvée.

    sinon :

    #{.+?}#i

    qui rend juste le masque en cours ungreedy. Ca revient à peu près au même.
    Pourfendeur de singletons en croisade

  3. #3
    Membre chevronné
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Novembre 2004
    Messages
    1 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 284
    Points : 2 160
    Points
    2 160
    Par défaut
    Merci pour ta réponse rapide.

    N'y aurait il pas une option pour récupérer les deux d'un coup car la je n'en ai qu'un seul ?

    Merci beaucoup,
    Stéphane.

  4. #4
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Avec preg_match_all ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $string='<P>{QUARTZ GT P1}</P><P>{QUARTZ GT P2}</P>';
    preg_match_all('/{.*?}/',$string, $result);
    foreach ($result[0] as $capture) {
    	echo $capture;
    	echo "<br/>";
    }
    Fred

  5. #5
    Membre chevronné
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Novembre 2004
    Messages
    1 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 284
    Points : 2 160
    Points
    2 160
    Par défaut
    Merci à toi pour cette rapidité qui a permis de corriger mon problème.

    Maintenant je peux traiter autant de {..} que je le veux.

    Merci,
    Stéphane.

  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 : 49
    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
    Citation Envoyé par Petibidon Voir le message
    Au choix :

    #{.+}#iU

    Le U rendra ta regex ungreedy (moins gourmande). Elle s'arrêtera à la première accolade trouvée.

    sinon :

    #{.+?}#i

    qui rend juste le masque en cours ungreedy. Ca revient à peu près au même.
    Un autre choix, encore plus performant :

    #{[^}]+}#

    et l'ultimator !

    #{[^}]++}#

    Ce qui nous donnera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $string='<P>{QUARTZ GT P1}</P><P>{QUARTZ GT P2}</P>';
    preg_match_all('#{[^}]++}#',$string, $result);
    foreach ($result[0] as $capture) {
    	echo $capture;
    	echo "<br/>";
    }
    Bref encore et toujours : évitez le .* au maximum et ne l'employez que lorsqu'il n'y pas d'autre choix.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

Discussions similaires

  1. Petit soucis avec une regexp
    Par Nickname dans le forum Langage
    Réponses: 2
    Dernier message: 21/07/2011, 08h23
  2. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 18h13
  3. souci avec un algorithme
    Par slider16 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 22/03/2004, 17h17
  4. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52
  5. Réponses: 4
    Dernier message: 16/02/2003, 12h16

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