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 :

Remplacement de plusieurs chaines [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 126
    Points : 105
    Points
    105
    Par défaut Remplacement de plusieurs chaines
    Bonsoir,

    J'ai jeté un oeil au tutorial de developpez.com, et j'ai une question, comment fait t'on pour remplacer tout les occurrences du patern, par exemple quand j'execute ce code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $pattern  = "#\[g\](.*)\[/g\]#";
     
    $subjects = "Initiation aux [g]expressions régulières[/g], Initiation aux expressions [g]rationnelles[/g]";
     
    echo preg_replace($pattern, "<strong>$1</strong>", $subjects);

    Ca me retourne :
    Initiation aux expressions régulières[/g], Initiation aux expressions [g]rationnelles

    Alors que j'aimerai que ça me retourne :
    Initiation aux expressions régulières, Initiation aux expressions rationnelles

    Merci beaucoup

  2. #2
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Il faut que ton pattern soit ungreedy, c'est à dire qu'il matche les plus petites chaînes qui vérifient le pattern au lieu de chercher les plus grandes, qui est le comportement par défaut.

    Pour préciser ungreedy, on rajoute un ? derrière les patterns susceptibles d'être greedy, c'est à dire .*, .+ etc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern  = "#\[g\](.*?)\[/g\]#";
    On peut aussi utiliser le modifier U pour l'ensemble du pattern directement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern  = "#\[g\](.*)\[/g\]#U";

  3. #3
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 126
    Points : 105
    Points
    105
    Par défaut
    Ca marche ! Super, merci beaucoup !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/08/2010, 17h45
  2. Réponses: 2
    Dernier message: 12/02/2009, 12h31
  3. Remplacer plusieurs chaines dans plusieurs fichiers
    Par freestyler dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 17/04/2008, 19h16
  4. Réponses: 2
    Dernier message: 07/03/2007, 10h46
  5. Réponses: 2
    Dernier message: 24/09/2006, 21h21

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