J'utilise assez souvent preg_replace sans probleme, mais c'est vrai toujours sur des cas simples (sans limite de remplacement et sur chaine et non des tableaux). Je n'ai fait que te rapporter la doc de php.net sur cette fonction...
S.
J'utilise assez souvent preg_replace sans probleme, mais c'est vrai toujours sur des cas simples (sans limite de remplacement et sur chaine et non des tableaux). Je n'ai fait que te rapporter la doc de php.net sur cette fonction...
S.
J'utilise assez souvent preg_replace sans probleme, mais c'est vrai toujours sur des cas simples (sans limite de remplacement et sur chaine et non des tableaux). Je n'ai fait que te rapporter la doc de php.net sur cette fonction...
S.
Bon et bien , quelle est la syntaxe convenable pour placer un délimiteur dans le preg_replace selon vous? Je cherche un exemple dans la doc php ils n'en donnent pas à priori.
Bon je me suis inspiré de cette ligne sur le site expreg.com :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $chain=preg_replace('`[<br\s?/>]{2,}`','<br/><br/> ',$chain);
Et j'ai essayé ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $contenu=preg_replace("`[$libelle]{2,}`"," <a href=\"http://{$bob['urlMotClef']}.htm\"> $libelle </a> ",$contenu);};
Maintenant plus rien ne s'affiche.
Ben, la pour moi c'est une colle.
Sinon, tu fais un petit script perl, ce langage fait ce genre de remplacement parfaitement.
$ch=~s/'pomme'/'lien pomme'/; =>premier mot rencontre remplace
$ch=~s/'pomme'/'lien pomme'/g;=>tous les mots remplaces
$ch=~s/'pomme'/'lien pomme'/i;=>premier mot, sans distinction de casse
$ch=~s/'pomme'/'lien pomme'/gi;=>tous les mots sans distinction de casse
PS: desolé pour le multi-post !
Perl je ne connais pas du tout, je ne peux pas me lancer dedans juste pour ce script, c'est dommage.
Je viens d'essayer ça aussi :
Pourtant si j'ai bien lu le manuel PHP ça devrait fonctionner.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $count=1; $libelle=$bob[libelle]; $libelle=" $libelle "; $contenu=str_replace("$libelle"," <a href=\"http://www.mobilactif.com/{$bob['urlMotClef']}.htm\"> $libelle </a> ",$contenu,$count);
Mais là j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Warning: Wrong parameter count for str_replace() in /home/discussion/centre-commentaire.php on line 153
Code : Sélectionner tout - Visualiser dans une fenêtre à part $contenu = preg_replace('`\b'. $libelle .'\b`', '<a href="http://'.$bob['urlMotClef'].'.htm">'. $libelle .'</a>', $contenu, 1);![]()
ah non, le compteur d'occurence n'est pas fait pour ça.
Donc ce doit être preg_replace et j'en reviens à ce délimiteur : quelqu'un connait la bonne syntaxe ??
délimiteur... ? Attention au vocabulaire, ca évite à tout le monde de tourner autour du pot ! C'est un paramètre.Envoyé par psychoBob
ok, j'ai repris le mot anglais c'est pour ça.
j'ai essayé ça pour voir :
ça n'affiche rien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $libelle=$bob[libelle]; $libelle=" $libelle "; $trans = array("$libelle" => "< href=\"http://$libelle.htm\">$libelle</a>"); strtr("$contenu",$trans);
J'essaye ton code, Mr N .
ça fonctionne !!!! T'es balaise ! Enfin pour moi, pour les autres je sais pas![]()
Dans ton code :
Que signifie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $contenu = preg_replace('`\b'. $libelle .'\b`', '<a href="http://'.$bob['urlMotClef'].'.htm">'. $libelle .'</a>', $contenu, 1);
1) \b'.
Cela marque les espaces ?
2) Pourquoi place tu des . avant et après chaque variable?
3) Pourquoi des ' et pas des " ?
1)
http://php.net/reference.pcre.pattern.syntax.php
http://expreg.com/ancrages.php
2)
Concaténation de chaine
3)
Simple préférence
Bon alors là je regarde le lien n° 2 :
Il est écrit :
\B Indique ce qui n'est pas une limite de mot dans une chaîne de caractères
Aussi ce doit être possible de faire en sorte que le mot pommes se voit remplacer par le lien vers le mot pomme, au singulier, même si dans ma liste de mot je n'ai que pomme au singulier.
Genre '`\b'.$libelle.'\B`' avec un s après le \B, mais j'ai peur d'écrire des trucs un peu trop exotiques.
je crois que les ` c un motif en regex - non ?
Bien on peut en laisser échapper quelques un ça n'est pas trop grave, il y a quand même beaucoup moins de mots qui se terminent par x que par s au pluriel. D'ailleur je n'en ai même pas dans ma liste de 500 mots je crois.
**edit**
Bon quoi qu'il en soit c'est déjà bien comme, il sera toujours temps d'en remettre une couche par la suite.
Merci à tous !![]()
Je te parle pas de singulier x / s
tu porpose le pattern \bpomme\B afin de pouvoir récupérer pomme et pommes. Mais mon petit doigt me dit -- mais il est pas très fort en regexp -- que tu risques de récupérer aussi pommeau, qui n'a plus ou moins rien à voir avec une pomme.
De plus si pomme et le dernier mot de la phrase, alors tu le récupérera pas car . (fin de phrase) est un délimiteur de mot.
Ah d'accord.
En fait c'est loin d'être complètement au point c'est sur : Deux liens de suite et ça ne fonctionne pas car le < du lien deux touche le mot précédent, donc ça ne correspond plus au masque.
Idem pour les pluriels et pour les débuts de phrase ou pour les apostrophes (ex : l'Allemagne').
(très) loin d'être parfait donc, mais quand même utile, ça vaudra le coup de l'améliorer.
Eventuellement je peux créer une table qui comporte la liste des mots clefs plus leur variante avec majuscule et pluriel.
Ca doit pas mal tirer sur le serveur tout ça, mais quand je teste en ligne, y compris avec des pages très longue, ça ne ralentit pas plus que ça (je suis tout seul me direz vous).
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager