Problème particulier avec Preg_replace
3 messages
• Page 1 sur 1
- yanism
- WRInaute discret

- Messages: 91
- Inscription: 29 Nov 2006
Problème particulier avec Preg_replace
Bonjour, je ne suis pas un spécialiste de Preg_replace et je rencontre quelques problèmes avec cette fonction php.
Voilà mon cas :
J'ai un tableau de chaines en minuscules qui peuvent être composées de un où plusieurs mots.
J'ai un texte contenant les mots du tableau cité avant.
$string='bla bla blabla blabla Mot1 blabla blabla blabla mot2 mot3 blabla blabla blabla blabla Mot4 blabla blabla blabla blabla blabla bla mot4';
Dans ce texte les mots peuvent être en majuscules contrairement à ceux du tableau qui ne sont qu'en minuscules (je précise l'histoire des majuscules et minuscules juste pour justifier l'utilisation de preg_replace et non str_ireplace car au final je veux garder les majuscules du texte s'il y en avait, après remplacement. Mais ce n'est pas là le problème)
Je voudrais donc remplacer dans le texte les mots (du tableau) par des url pour que celà donne :
$string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla <a href="http://url.com/mot2+mot3">mot2 mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';
J'ai testé deux solutions (voir le code ci-dessous) qui ont visiblement le même effet. Elles fonctionnent bien sauf pour le cas de $tab[2] et $tab[3] où la chaine 'mot3' est contenue dans les deux éléments du tableau. Je présume qu'il remplace deux fois la chaine 'mot2 mot3' de mon texte à cause de $tab[2] et $tab[3] ce qui fout une grosse pagaille.
Si l'ordre de $tab[2] et $tab[3] doit changer je voudrais que le texte ne soit changé qu'une seule fois et donc que je me retrouve soit avec :
$string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla <a href="http://url.com/mot2+mot3">mot2 mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';
soit :
$string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla mot2 <a href="http://url.com/mot3">mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';
Voilà les deux fonctions utilisées (...et qui ne marchent pas pour mon cas
)
Merci d'avance
Voilà mon cas :
J'ai un tableau de chaines en minuscules qui peuvent être composées de un où plusieurs mots.
- Code: Tout sélectionner
$nbOcc=4;
$tab[1]='mot1';
$tab[2]='mot2 mot3';
$tab[3]='mot3;
$tab[4]='mot4';
J'ai un texte contenant les mots du tableau cité avant.
$string='bla bla blabla blabla Mot1 blabla blabla blabla mot2 mot3 blabla blabla blabla blabla Mot4 blabla blabla blabla blabla blabla bla mot4';
Dans ce texte les mots peuvent être en majuscules contrairement à ceux du tableau qui ne sont qu'en minuscules (je précise l'histoire des majuscules et minuscules juste pour justifier l'utilisation de preg_replace et non str_ireplace car au final je veux garder les majuscules du texte s'il y en avait, après remplacement. Mais ce n'est pas là le problème)
Je voudrais donc remplacer dans le texte les mots (du tableau) par des url pour que celà donne :
$string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla <a href="http://url.com/mot2+mot3">mot2 mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';
J'ai testé deux solutions (voir le code ci-dessous) qui ont visiblement le même effet. Elles fonctionnent bien sauf pour le cas de $tab[2] et $tab[3] où la chaine 'mot3' est contenue dans les deux éléments du tableau. Je présume qu'il remplace deux fois la chaine 'mot2 mot3' de mon texte à cause de $tab[2] et $tab[3] ce qui fout une grosse pagaille.
Si l'ordre de $tab[2] et $tab[3] doit changer je voudrais que le texte ne soit changé qu'une seule fois et donc que je me retrouve soit avec :
$string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla <a href="http://url.com/mot2+mot3">mot2 mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';
soit :
$string='bla bla blabla blabla <a href="http://url.com/Mot1">Mot1</a> blabla blabla blabla mot2 <a href="http://url.com/mot3">mot3</a> blabla blabla blabla blabla <a href="http://url.com/Mot4">Mot4</a> blabla blabla blabla blabla blabla bla <a href="http://url.com/mot4">mot4</a>';
Voilà les deux fonctions utilisées (...et qui ne marchent pas pour mon cas
- Code: Tout sélectionner
for ($i=1; $i<=$nbOcc; $i++)
{$pattern = '/( '.$tab[$i].' )/i';
$string = '<a href="http://url.com/'.$tab[$i].'" >$1</a>';
$string=preg_replace($pattern, $replacement, $string);
}
- Code: Tout sélectionner
$pattern = array();
$replacement = array();
for ($i=1; $i<=$nbOcc; $i++)
{$pattern[$i]='/('.$tab[$i].')/i';
$replacement[$i] = '<a href="http://url.com/'.$tab[$i].'" >$1</a>';
}
$string=preg_replace($pattern, $replacement, $string);
Merci d'avance
-

Leonick - WRInaute accro

- Messages: 19595
- Inscription: 8 Aoû 2004
Re: Problème particulier avec Preg_replace
il faut que dans ton masque tu vérifies que ton mot ne soit pas déjà à l'intérieur d'un <a href>
pour pouvoir faire des essais de masques offline, regex-coach est l'idéal
pour pouvoir faire des essais de masques offline, regex-coach est l'idéal
3 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- [Résolu]Problème JS - replace
- php preg masque
- Warning: preg_match() [function.preg-match]:
- Problème particulier
- Probleme de .htaccess particulier
- Mots clés PAP et de particulier à particulier
- Projet de plateforme : problème TVA avec particulier
- Problème Adsense sur deux pages en particulier
- fonction replace
- replace PHP
- Définition(s) du Web 2.0 - 10-03-2006
- Mise à jour des services Postini - 11-02-2009
- Ouverture d'un forum consacré à DeepIndex sur WebRankInfo - 18-01-2003
- Conclusion sur l'analyse du PageRank de Google - 06-09-2008
- Séminaire référencement avec la CCIP Délégation de Paris le 12/12/2005 - 17-10-2005
- Quelques nouveautés dans le forum WebRankInfo - 17-08-2006
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
