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 :

expression reguliere pour remplacer un mot mais pas un autre


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut expression reguliere pour remplacer un mot mais pas un autre
    Hello,

    Décidément, les regexp et moi, ca fait au moins 2 (ou 3 ou 4). Je recupère un texte dans lequel je veux remplacer un mot sauf si celui ci est dans une url.

    ex : remplacer "bleu" par "blanc"

    le bleu est une super couleur; le plâtre est bleu. un <a href="page_bleu.html">exemple ici</a>

    (ok, l'exemple est con mais peu importe )

    Dans ce texte, je voudrais remplacer les 2 premier 'bleu' par 'blanc' mais pas celui du lien. j'ai fait des tests avec ca : http://gskinner.com/RegExr/ mais je n'arrive a rien de concluant

    Si qq1 a une idee...

    Chag

  2. #2
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    Le plus simple et rapide serait :

    ne prend "bleu" seulement avec un espace avant et un espace ou un point après.

    Tu peux le voir sur le site que tu... cites : http://regexr.com?2tdm6

    Bien sûr, c'est plus simple et donc le moins sûr.
    Par exemple, ceci ne passe pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    le bleu est une super couleur; le plâtre est bleu. un <a href="page_bleu.html" class="button bleu overflow">exemple ici</a>
    Il prendra aussi le "bleu" dans la class par sûr que ce soit ce que tu veux (mais bon, ça arrive rarement... mais qui sait?).

    Bien sûr, on pourrait complexifier le regex pour qu'il ne prenne pas les attributs et leurs valeurs mais encore une fois, les regex pour parser du HTML... non, faut éviter sauf si on est vraiment sûr de son code et de ce qui va se passer. (et encore).

    Le "mieux" (pour moi) serait de parser le HTML avec DOMDocument et de prendre que les valeurs des noeuds et de passer par un str_replace() tout facile par la suite
    Je suis fervent utilisateur de PHP et de jQuery.
    Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web de développeur web dans le Val d'Oise mais aussi plusieurs projets personnels.
    Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, une extension de navigateur pour envoyer l'URL de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc…

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Yop,

    Effectivement, je n'avais pas pensé a ca mais ca va pas coller. Si pour une raison ou une autre, j'ai un truc du genre <h3>bleu</h3>, ca va pas passer.

    Je pense qu'il doit y avoir une solution avec les regexp

    Merci en tout cas.

  4. #4
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut,

    Tu peux essayer quelque chose comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    $chaine = 'le bleu est une super couleur; le plâtre est bleu. un <a href="page_bleu.html">exemple ici</a>';
    $array = preg_split('/(<[^>]+>)/ismU', $chaine, -1, PREG_SPLIT_DELIM_CAPTURE);
     
    $result = '';
    foreach ($array as $value) {
    	if (strlen($value) > 0 && $value[0] != '<') {
    		$value = str_replace('bleu', 'blanc', $value);
    	}
     
    	$result .= $value;
    }
     
    echo $result;
    ?>
    Bon développement
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

Discussions similaires

  1. expression reguliere pour remplacer une string
    Par flash22 dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 22/03/2011, 16h43
  2. Réponses: 1
    Dernier message: 27/11/2010, 15h43
  3. [RegEx] expression reguliere pour remplacement
    Par mme_chelaou dans le forum Langage
    Réponses: 7
    Dernier message: 28/01/2010, 20h26
  4. expression reguliere pour remplacement
    Par wulucie dans le forum Langages fonctionnels
    Réponses: 0
    Dernier message: 22/08/2009, 16h32
  5. Expression régulière pour plusieurs remplacements
    Par mickael99 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 22/02/2006, 12h15

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