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 :

Enlever le contenu d'une balise


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Enlever le contenu d'une balise
    Bonjour à tous,
    Besoin d'un petit coup de main sur les expressions régulières.

    j'ai une chaine de caractère de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <ul>
    <li>blabla
        <ul>
            <li><a lien>blabla</a> blabla<p><a lien><img src="image" alt="" /></a></p><br /></li>
     
            <li><a href="lien">du texte</a>blabla<p><a href="lien"><img src="image" alt="" /></a></p><br /></li>
     
           <li><a href="blabla">bla6</a> blabla<p><a href="lien"><img src="image" alt="" /></a></p><br /></li>
        </ul>
    </li>
    </ul>
    Et j'aimerai enlever tout ce qui se trouve entre les balises <p>
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace("<p><a.*>[^<].*</a></p><br />",'',$item->get_description());
    Mais ça enlève tout ce qui se trouve entre le premier <p> et le dernier </p>...

    Des idées pour résoudre mon problème?

    Merci d'avance

  2. #2
    mon_nom_est_personne
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace("<p>(.*)</p>",'',$item->get_description());
    mest parenthese en regexp definissent une variable, donc ce que tu veux remplacer, tu le mets entre parenthese ;-)

  3. #3
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    c'est quoi ces expressions régulières foireuses...

    Bon, déjà une expression régulière PERL (preg_*) doit commencer et finir par un caractère spécial... ce qui n'est pas le cas pour aucune de vos regexp :/

    Ensuite, pour ton problème judavid, il est tres classique. La solution consiste a ajouter l'option U pour éviter que preg prenne le plus petit masque qui correspond plutot que le plus gros masque.

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $masque="#<p>.+</p>#U";
     
    echo preg_replace($masque, '', $texte);

    @mon_nom_est_personne : tes parenthèses capturantes ne servent a rien puisque tu n'utilise pas \1 ou $1 dans la chaine résultat.

  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
    Citation Envoyé par Fladnag Voir le message
    Bon, déjà une expression régulière PERL (preg_*) doit commencer et finir par un caractère spécial... ce qui n'est pas le cas pour aucune de vos regexp :/
    Malheureusement, il y a bien des délimiteurs, mais qui ne sont pas volontaires : dans cette expression le premier < est le délimiteur de début et > est le délimiteur de fin. Ce qui conduit immanquablement à une erreur d'interprétation.

    Ensuite, je ne suis pas fan de l'option U, qui est un peu trop spécifique au langage à mon goût
    On peut avantageusement remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $masque="#<p>.+</p>#U";
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $masque="#<p>.+?</p>#";
    qui est plus générique ( et Perl-like)
    • 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. [XSLT]tester le contenu d'une balise
    Par koudjo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/07/2006, 12h22
  2. [DOM] Récupérer le contenu d'une balise donnée
    Par mimi31110 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 26/06/2006, 23h46
  3. [XPath] contenu d'une balise vide ?
    Par mimi31110 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 16/06/2006, 14h50
  4. modiffier le contenu d'une balise
    Par duplo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/06/2006, 17h20
  5. [xsl] mauvaise interprétation du contenu d'une balise XML
    Par Cédric B. dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/01/2006, 12h59

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