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 24/02/2008, 15h25   #1
Invité de passage
 
Inscription : février 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 3
Points : 1
Points : 1
Par défaut Problème preg_replace mot exact

Bonjour à tous,

J'ai un petit soucis, je cherche à remplacer grâce à preg_replace un mot exact dans une chaine.

$ancien = "Je possède plusieurs espèces de chat";
$origine = array("/espèce/", "/chat/");
$remplace = array("races", "chien");
$nouveau = preg_replace($origine, $remplace, $ancien);

Dans voilà, dans mon exemple, la fonction reg_replace va remplacer espèces par racess, j'aimerais bien arriver à reconnaître la sous chaîne exact pour ne la remplacer que si elle colle.

J'ai parcouru le forum mais je n'ai rien vu encore pour m'aider.

Merci d'avance.

Arnaud
nonoco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2008, 15h29   #2
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
Utilisez alors le délimiteur de mot \b :
Code :
$origine = array("/\bespèce\b/", "/\bchat\b/");
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2008, 17h37   #3
Invité de passage
 
Inscription : février 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 3
Points : 1
Points : 1
Merci

J'ai réussi à rajouter la détection des plurielles et des féminins.
Code :
$nouveau = preg_replace( '/\b('.$origine.')+(?:|s|e|es)\b/i', '$remplace', $ancien);
J'avance bien, mon but final étant d'insérer des liens à la volée vers une définition d'un glossaire.

J'ai voulu tenter ça :
Code :
$nouveau = preg_replace( '/\b('.implode('|', $origine).')+(?:|s|e|es)\b/i', '<a href="'.XOOPS_URL.'/definition-'.$entryID.'-'.rewrite($1).'.html" title="'.$1.'"'.$thetarget.$styletoembellish.'>$0</a>', $ancien);
Mais il y a un bug.

En tout cas, encore merci, ça m'a permis de bien avancer cette aprem.
nonoco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2008, 17h43   #4
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
Si vous avez besoin de faire évaluer la chaîne de remplacement qui est du code PHP à exécuter lors de chaque remplacement il faut s'orienter vers la fonction preg_replace_callback (préférable) ou le modificateur e. Je vous laisse faire des recherches, nous l'expliquons régulièrement
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2008, 19h57   #5
Invité de passage
 
Inscription : février 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 3
Points : 1
Points : 1
Encore merci

J'ai encore bien avancé :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
$ancien = "espèces et soiesr";
$origine = array("espèce", "soies");
function remplace($matches)
{
  $essai = '<a href=\"'.XOOPS_URL.'/definition-'.$matches[1].'.html\" title=\"'.$matches[1].'\"'.$thetarget.$styletoembellish.'>'.$matches[0].'</a>';
  return $essai;
}
$nouveau = preg_replace_callback('/\b('.implode('|', $origine).')+(?:|s|e|es)\b/i','remplace', $ancien);
 
echo $ancien;
echo "<br /><br /><br />";
echo $nouveau;
nonoco 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 03h40.


 
 
 
 
Partenaires

Hébergement Web