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 :

remplacer un mot via preg_replace, mais pas si il s'agit d'un attribut d'une balise html [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut remplacer un mot via preg_replace, mais pas si il s'agit d'un attribut d'une balise html
    Bonjour,

    Je possède la chaine $input suivante :
    $input = '<img src="image/chat.jpg" border="0" /><div align=left>ceci est un chat</div>';

    Et les 2 chaines suivantes :

    $m = 'chat';
    $q = 'chien';

    Je souhaiterai en retour d'une fonction le résultat suivant :
    $return = '<img src="image/chat.jpg" border="0" /><div align=left>ceci est un chien</div>'
    c'est à dire remplacer 'chat' par 'chien' uniquement si le mot à remplacer n'est pas l'attribut d'une balise html

    Je pensais faire quelque chose du genre :

    *****
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function remplace($input,$m,$q)
    {
        return preg_replace("??????$m????????",$q,$input);
    }
     
    $return = remplace($input,$m,$q)
    *****

    mais j'avoue bloquer sur l'expression régulière à appliquer dans ma fonction (j'ai mis des ???? pour souligner mon désarrois)

    Merci d'avance pour votre aide.

  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 : 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
    Ceci serait-il suffisant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $str = '<img src="image/chat.jpg" border="0" /><div align=left>ceci est un chat</div><chat attribut="keep">le chat qui miaule</chat>';
    $reg = '#chat(?![^<]*>)#';
     
    print preg_replace($reg, 'chien', $str);
    • 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

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 634
    Points : 66 650
    Points
    66 650
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $chaine='<img src="image/chat.jpg" border="0" /><div align=left>ceci est un chat</div>';
    $reg="#(>.*)(chat)(.*<)#";
    $res=preg_replace($reg,'$1chien$3',$chaine);
    echo htmlentities($res);
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Vos 2 exemples fonctionnent parfaitement et cela semble répondre à ma problématique.
    Merci à vous deux. Il me reste à analyser en détail les expressions régulières que vous m'avez fourni.

    Un grand merci.

  5. #5
    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
    Attention, il faut bien tester les possibilités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $str = 'chat<img src="image/chat.jpg" border="0" /><div align=left>ceci est un chat</div><chat attribut="keep">le chat qui miaule</chat>chat';
     
    $reg = '#chat(?![^<]*>)#';
    print preg_replace($reg, 'chien', $str);
     
    print "\n\n";
     
    $reg = '#(>.*)chat(.*<)#';
    print preg_replace($reg, '$1chien$2', $str);
    • 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

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

Discussions similaires

  1. [PostgreSQL] Relations inexistantes via sql mais pas graphiquement
    Par FotoXe33 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/06/2012, 13h16
  2. [RegEx] Recherche et remplacement de l'attribut d'une balise HTML
    Par omelhor dans le forum Langage
    Réponses: 5
    Dernier message: 31/01/2008, 08h21
  3. Mot de passe mais pas de protection
    Par Aragorn_destroy dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 02/07/2007, 10h18
  4. [RegEx] Regex qui fonctionne dans un preg_replace mais pas dans un ereg
    Par méphistopheles dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2007, 12h56

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