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 :

Ne pas remplacer un mot compris entre 2 balises [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Par défaut Ne pas remplacer un mot compris entre 2 balises
    Bonjour,

    J'ai un script qui me remplace une liste de mots-clés par une url.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $texte = "je ne mange pas d'autruche";
    $mot='/\b(autruche)\b/i';
    $url='<a href="www.autruche.com">$1</a>';
    $texte = preg_replace($mot,$url,$texte,-1);
    Je souhaiterai ne pas remplacer le mot 'autruche' quand celui-ci est déjà compris entre 2 balises <a></a> ou dans le href=""

    Ce qui ferait :

    je ne mange pas d'autruche
    >>> je ne mange pas d'<a href="www.autruche.com">autruche</a>'

    je ne mange pas d'<a href="www.autruche.org/index.html">cliquez ici</a>
    >>> on ne modifie rien

    je ne mange pas d'<a href="www.animaux.org/index.html">tout sur l'autruche</a>
    >>> on ne modifie rien

    Je pense que je dois modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $mot='/\b(autruche)\b/i';
    en interdisant la chaine de commencer par <a et finir par </a> mais je n'y arrive pas, j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mot='/\(<a)\b(autruche)\b\(<\/a>)/i';
    Merci infiniment pour votre aide

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    j'avais déjà résolu un problème de ce genre en faisant l'opération en plusieurs temps :
    1 : je protégeais les parties qui ne devait pas être modifiées
    2 : je faisais les remplacements de base
    3 : je remettais en place les parties protégées

    ce qui donne ça :
    départ : je ne mange pas d'autruche parce que je fais partie de la <a href="http://spa.fr">société protectrice des autruches</a>
    1 : je ne mange pas d'autruche parce que je fais partie de la ZONE_PROTEGÉE_1
    2 : je ne mange pas d'<a href="www.autruche.com">autruche</a> parce que je fais partie de la ZONE_PROTEGÉE_1
    3 : je ne mange pas d'<a href="www.autruche.com">autruche</a> parce que je fais partie de la <a href="http://spa.fr">société protectrice des autruches</a>

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Par défaut
    Merci pour la réponse, c'est une bonne solution !

    Il faut donc que j'utilise preg_match_all pour stocker dans un tableau les ZONE_PROTEGEE_x (x index du tableau) et les remettre ensuite avec str_replace

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

Discussions similaires

  1. Trouve un mot compris entre des *
    Par qmike dans le forum Excel
    Réponses: 4
    Dernier message: 30/09/2014, 16h20
  2. [Turbo Pascal] La fonction random : nombre compris entre 1 (pas 0) et 100
    Par williamdunord dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 24/12/2012, 13h55
  3. Tabulations remplacées par des espaces entre les balises CODE
    Par Médinoc dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 21/09/2010, 12h34
  4. [RegEx] remplacer une chaine comprise entre 2 balises
    Par Khleo dans le forum Langage
    Réponses: 3
    Dernier message: 29/05/2008, 18h02
  5. LIKE de tout ce qui n'est pas compris entre a<-&
    Par DjinnS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/07/2003, 14h09

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