[regexp] delimitation de mots

WRInaute occasionnel
Salut,

Je suis entrain de travailler sur une sorte de moteur de recherche, et utilise la regexp suivante (PCRE) pour détecter la présence du mot "xyz" dans la chaine $chaine:

Code:
preg_match('`\bxyz\b`im',$chaine);

l'assertion \b permet de detecter une limite de mot (en incluant la ponctuation) et les parametres i et m permettent de ne pas tenir compte de la casse ni des sauts de lignes.

Seulement j'ai un probleme, si mon mot c'est par exemple "yahoo" et que $chaine comporte une url style -www.balba.yahoo.com/truc alors ma regexp retourne vrai. C'est normal, $chaine comporte bien le "mot" yahoo encadré par deux points, donc preg_match le detecte ce que je ne veux pas (car en realite $chaine ne "parle" pas de yahoo a proprement parler)

Donc ma question est la suivante: auriez vous une idee de regexp me permettant de detecter le mots sauf s'il est entre deux points (ce qui signifie que ce mot est dans une url), pour eviter de polluer ma recherche ?

Merci d'avance !
 
WRInaute occasionnel
voila une bonne question !!
En fait j'ai le même problème donc je suis également preneur d'une solution.
D'avance merci à tous
 
WRInaute occasionnel
Bon alors voila ce que j'ai trouve de mieux:

Code:
preg_match('`(^xyz\b|\sxyz\b)`im',$chaine);

Donc ca donne ca:

"xyz blalballbalbl" -> true

"blalblal xyz wefwefwe" -> true

"sddfwaef xyz, wefewfwef" -> true

et enfin,

"dsfsadfsd -http://www.xyz.com wfef" -> false :)

Seul desavantage, si l'auteur du texte ne connait pas les regles de ponctuations et ecrit un truc du style:

"sdfsdfsd,xyz ferferferf" -> false (a cause du fait qu'il devrait y avoir un espace apres la virgule)

Enfin bon c'est mieux que rien...

Qqun a qque chose de mieux a suggérer ?
 
WRInaute discret
Faire ça en deux passes ?
Par exemple, utiliser la même regex que celle qui crée des liens à partir d'URL sur un forum, mais qui au lieu de remplacer l'URL par un lien la remplacerait par une chaîne vide.
Ensuite tu appliques ta regex sur la chaîne épurée des URL...
 
Discussions similaires
Haut