Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/03/2011, 13h03   #1
Invité de passage
 
Inscription : octobre 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 14
Points : 2
Points : 2
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
chagam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h14   #2
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
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 :
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
__________________
Membre de StackOverflow, je suis un fervant 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 mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet 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...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h42   #3
Invité de passage
 
Inscription : octobre 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 14
Points : 2
Points : 2
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.
chagam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 14h32   #4
Modérateur
 
Avatar de Nesmontou
 
Homme Benjamin PREVOT
Architecte de système d'information
Inscription : septembre 2004
Messages : 1 568
Détails du profil
Informations personnelles :
Nom : Homme Benjamin PREVOT
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Finance

Informations forums :
Inscription : septembre 2004
Messages : 1 568
Points : 2 493
Points : 2 493
Salut,

Tu peux essayer quelque chose comme ça
Code :
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
Nesmontou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h42.


 
 
 
 
Partenaires

Hébergement Web