Problème d'espaces en trop avec preg_replace()

Seraph

WRInaute occasionnel
Bonjour,
Je fais une fonction qui permet de mettre en gras des mots clés dans un texte automatiquement. Le soucis est qu'avec mon expression, je me retrouve avec un espace de chaque côté du mot clé et je ne sais pas trop comment les éviter.

Le code est le suivant :
Code:
$text = preg_replace('`[^\/\-\.a-zA-z0-9\>]'.$search.'([a-zA-Z]*[^\<])`iu', '<strong>$0</strong>', $text);

exemple :
Code:
$search = 'test';
$text = "ceci est un 'test pour mon preg_replace";

Ca affichera :
ceci est un<strong>'test </strong>pour mon preg_replace
au lieu de 
ceci est un '<strong>test</strong> pour mon preg_replace

Les caractères (dans ce cas : apostrophe puis espace) jouxtant le mot clé sont du mauvais côté de la balise strong...
Si quelqu'un sait comment empêcher le preg_replace d'inclure un caractère avant et après $search dans le strong, je suis preneur !


Bonne journée,
Seraph.
 

forty

WRInaute passionné
tu peux pas tout simplement mettre :
Code:
$text = preg_replace('/' . preg_quote($search, '/') . '/iu', '<strong>$0</strong>', $text);
 

Seraph

WRInaute occasionnel
Merci pour ta réponse,
Non en fait je ne peux pas, parce que si, par exemple, j'ai :

Code:
$search = 'test';
$text = "http://www.test.com";

Ca m'affichera : http://www<strong>.test.</strong>.com

Mon lien deviendra incliquable...
(les liens http sont automatiquement transformés en hyperliens dans la suite du script)
 

forty

WRInaute passionné
tu peux utiliser \b (limite de mot) :
Code:
$text = preg_replace('/(\b)(' . preg_quote($search, '/') . ')(\b)/iu', '$1<strong>$2</strong>$3', $text);
ou faire comme tu avais fait :
Code:
$text = preg_replace('/([^\/\-\.a-zA-z0-9\>])(' . preg_quote($search, '/') . ')([a-zA-Z]*[^\<])/iu', '$1<strong>$2</strong>$3', $text);
 

Seraph

WRInaute occasionnel
Helas non, ça fait pareil, ça me met les balises au milieu d'un lien si le mot clé est dedans...
Tu sais où je peux trouver une liste de toutes ces règles \b \s \d \w etc. ? Je ne sais même pas comment ça s'appelle, j'ai jamais trouvé...
 

forty

WRInaute passionné
=>http://fr2.php.net/manual/fr/regexp.reference.escape.php

a mon avis le seul séparateur qui doit aller c'est \s (tout caractère blanc)
 

Discussions similaires

Haut