[RESOLU] remplacer occurence php

Mammouth du PHP | 504 Messages

22 oct. 2013, 18:36

bonjour,

J'ai un texte dans lequel je remplace des termes, j'arrive a ne remplacer qu'une seule occurence dans le texte par ce script:
$chaine2 = preg_replace($pattern, ' <a href="'.$rempl.'" title="'.$keyword.'">'.$keyword.'</a> ' , $chaine2, 1);
ce qui me pose probleme, lorque que j'ai:

- xp, console xp comme mots clefs

et plusieurs occurences xp et console xp dans mon texte: cela va seulement remplacer la premiere occurence de xp et pas "console xp" puisque xp est contenu dedans malgré que ce soit dans 2 phrases différentes.

Je ne sais pas comment faire. J'espere que mon explication est claire.

ViPHP
xTG
ViPHP | 7331 Messages

22 oct. 2013, 19:33

preg_replace_all ? ;)

Eléphant du PHP | 170 Messages

22 oct. 2013, 19:42

le paramètre limit est à 1, c'est voulu ?

(limit : Le nombre maximal de remplacement pour chaque masque dans chaque chaîne subject.)

preg_replace_all ? ;)
allons bon ... :)

ViPHP
xTG
ViPHP | 7331 Messages

22 oct. 2013, 20:06

J'aurai mieux fait de linker la doc et j'aurai compris ma bévue. :mrgreen:
M'enfin... Cela confirme que je suis toujours pas à l'aise avec les regex !

Mammouth du PHP | 504 Messages

22 oct. 2013, 23:30

non, non, pas de preg_replace_all.

je me suis mal exprimé.

J'ai un texte genre:
$chaine2 = j'ai acheté un console xp. je souhaite voir la prochaine de xp.
Le but est de remplacer est de remplacer les termes xp et console xp par en fonction de deux mots clefs respectivement dans ma base: xp et console xp.

mon script fonctionne trés bien si seul les termes sont indépendant (c'est à dire par exemple j'aurai comme mots clefs: xp et console),

Mais comme j'ai xp et console xp, ça ne marche pas. Il remplace que le premier mot. le deuxième terme "xp" n'est pas remplacer parce qu'il y a xp dedans et qu'il a été traité avant.

Voilà, j'espère avoir été plus clair.

Dés qu'un terme contient un mot qui a déjà été traité ça ne fonctionne plus pour le terme suivant.

Eléphant du PHP | 116 Messages

23 oct. 2013, 11:17

Salut,

Dans ton pattern tu peux pas lui dire (tous les mots consoles suivis d'XP) tu fais : ça .
Puis après (tous les mots non précédés par le remplacement de console mais suivis de XP) tu fais ça. ?
@+,
Computarelier

Mammouth du PHP | 504 Messages

23 oct. 2013, 11:49

oui, c'est une idée mais je ne vois pas comment codé ça:

Voici mon code:
$pattern = '/ '.$keyword.' /';
$chaine2 = preg_replace($pattern, ' <a href="'.$rempl.'" title="'.$keyword.'">'.$keyword.'</a> ' , $chaine2, 1);
A noter que les mots kerword sont stockés en base et xp et console xp ne sont qu'un exemple. j'ai le meme probleme avec par exemple: php et forum php.

ViPHP
xTG
ViPHP | 7331 Messages

23 oct. 2013, 12:54

Je dis ça rapidement mais : pourquoi ne pas trier la liste des mots-clés par taille décroissante et ensuite par ordre alphabétique ?
Ainsi tu traiterai le mot clé "xp" après "console xp".