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 :

Arrêter à la 1ere occurence trouvée ? [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut Arrêter à la 1ere occurence trouvée ?
    Bonjour,

    Dans une chaîne $str contenant une liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ul><li class="classA">elem1</li><li class="classB">elem1b</li><li class="classB">elem1c</li><li class="classA">elem2</li></ul>
    je voudrais supprimer tout les li utilisant la classe classB.
    J'ai essayé avec cette regex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $str = preg_replace('#<li class="classB">(.+)</li>#', '', $str);
    mais le problème c'est qu'il m'efface tout jusqu'au bout.
    Je voudrais pouvoir les effacer un par un, je pense que c'est
    le (.+) qui me pose problème.
    Comment lui dire de s'arrêter au 1er </li> trouvé ?

    Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Reporte toi a la documentation de preg_replace, il y a un argument pour cela.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    Oui en effet il y a bien le paramètre "limit" qui est censé limiter le nombre d'occurrences mais je n'arrive pas à l'utiliser.
    D'après les exemples que j'ai vu ceci devrait fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $str = preg_replace('#<li class="classB">(.+)</li>#', '', $str, 1);
    mais il continue de tout m'effacer
    Est ce que je me suis trompé dans la syntaxe où y a t-il un autre problème ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    ah je vois ce que tu veux dire, essai en mode "non-greedy" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str = preg_replace('#<li class="classB">(.+)</li>#U', '', $str);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Par défaut
    Si j'ai bien compris ce que tu voulais faire, rajoute un ? dans ton (.+) :
    (.+?)

  6. #6
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    Merci à vous deux, les 2 solutions fonctionnent !

    Toutefois histoire de ne pas faire les choses à l'aveuglette:
    - Qu'est ce que le mode "non greedy" ?
    - Quel est exactement l'effet du ? dans (.+?) ?

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

Discussions similaires

  1. [XL-2013] Erreur sur la première occurence trouvée avec Find
    Par defluc dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/08/2013, 11h52
  2. [RegEx] S'arrêter à la première occurence d'un caractère
    Par Yekhen dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2010, 16h48
  3. S'arrêter à la première occurence dans un regex
    Par Anduriel dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/11/2009, 15h44
  4. [Regex c#] Arret a la premiere occurence trouvée
    Par guromgd dans le forum Général Dotnet
    Réponses: 8
    Dernier message: 20/04/2009, 08h29
  5. Réponses: 5
    Dernier message: 03/02/2005, 13h59

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