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 21/04/2008, 14h56   #1
Invité de passage
 
Inscription : mars 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 14
Points : 2
Points : 2
Par défaut Remplacements de mots interdits

Bonjour,

J'ai un soucis avec une fonction de remplacement. Je souhaite remplacer certains mots contenu dans mon tableau $FILTRE par la valeur correspondante dans $FILTRE2.

Dans $FILTRE j'ai 2 cas possibles :

- Mots genre "tutu" : remplacement de tout mot "tutu";
- Mots genre "tut*" : remplacement de tous les mots commencant par "tut";

Voici ma fonction :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
foreach ($FILTRE as $key => $value) {
        if($value[strlen($value)-1] == "*") { 
		$rep="".str_replace("*","",$value)."[[:alnum:]]*";
            	$msg=ereg_replace($rep,$FILTRE2,$msg);
	}
	else { 
		$rep="#".$value."#i";
		$msg=preg_replace($rep,$FILTRE2,$msg);
	}
}
Mon problème est que lorsqu'un mot interdit est inclu à un mot comme "nique" dans "veronique", ça remplace également... Je voudrais donc que la vérif se fasse uniquement sur les mots et ne prenne pas en compte les bouts de mots.

Merci de votre aide.

Alex
sourize est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2008, 15h01   #2
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Dans ce cas, rajoute un espace avant et après ta value dans la chaine de la regex
Il ne remplacera plus que les mots entiers
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2008, 15h46   #3
Invité de passage
 
Inscription : mars 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 14
Points : 2
Points : 2
Il ne sera pas pris en compte dans le cas où il se trouve en début ou fin de phrase aussi ..
sourize est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2008, 15h59   #4
Futur Membre du Club
 
Inscription : avril 2008
Messages : 22
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 22
Points : 19
Points : 19
Dans ce cas il faut que tu t'assures de l'absence de caractère alpha-numérique et du tiret avant, et après ton expression, l'absence de ponctuation.

Pour ce faire, tu dois rajouter
en début d'expression et
en fin d'expression.

Pour plus d'informations sur les assertions négatives, voir ici
Flameo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2008, 17h18   #5
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Et plus simplement, \b, le délimiteur de mot ne convient pas dans ce cas ?

Le motif \bnique\b cherchera le mot exact nique. Il n'y aura pas correspondance dans véronique, pour reprendre votre exemple

(valable uniquement avec les fonctions PCRE)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2008, 17h03   #6
Invité de passage
 
Inscription : mars 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 14
Points : 2
Points : 2
Parfait tout fonctionne, merci
sourize est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h44.


 
 
 
 
Partenaires

Hébergement Web