Problème avec une regex :(


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Problème avec une regex :(

Message le Jeu Juin 01, 2006 22:34

J'ai besoin de chercher certain mots dans une chaine afin de les mettre en gras.

Le problème c'est que le premier mot et le dernier mot de la chaine en question ne sont pas mis en gras.
Je pourrais le contourner en ajoutant un espace avant et après la chaine mais on doit bien pouvoir faire autrement.

A l'aide !!!

Voici mon bout de code :
Code: Tout sélectionner
preg_replace('/([^a-zA-Z])('.$mot.')([^-a-zA-Z])/i', '$1<strong>$2</strong>$3', $chaine)
ou mieux cela
Code: Tout sélectionner
preg_replace('/([\s,\.()])('.$mot.')([\s,\.()])/i', '$1<strong>$2</strong>$3', $chaine)


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Ven Juin 02, 2006 15:28

Personne peut m'aider ?


Xele
WRInaute discret
WRInaute discret
 
Messages: 109
Inscription: 10 Juil 2005

Message le Ven Juin 02, 2006 17:09

Essaye ca :

preg_replace("/\b".$mot."\b/i", "<strong>$2</strong>", $chaine);


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Ven Juin 02, 2006 18:14

Xele a écrit:Essaye ca :

preg_replace("/\b".$mot."\b/i", "<strong>$2</strong>", $chaine);


Merci...

Dire que je me suis pris la tête pendant un moment pour trouver.

Pour info, ce que j'ai besoin est ceci :

Code: Tout sélectionner
preg_replace('/(\b)('.$mot.')(\b)/i', '$1>strong>$2</strong>', $chaine);


$mot = une chaine de caractère du genre :
$mot = 'une expression à mettre en gras|une autre|mot|expression|etc';

Pour le moment, j'insérais du BBcode dans ma base de donnée pour intéragir avec certains mots [ b ] mot à mettre en gras [ /b ] par exemple.

Hormis le fait que c'est chiant d'ajouter ce BBcode d'une part et que les mots à mettre en gras peuvent être différent suivant le contexte de la page, j'ai donc créer un champ dans ma BDD dans lequel j'insère les mots et expressions à mettre en exergue suivant le contexte ou la page.

D'où l'intérêt de ma demande.

Par contre dans le même ordre d'idée, j'aurais besoin d'une fonction similaire pour mettre un lien sur certain des mot de mon site qui enverrais vers mon glossaire.

Pour cette pratique, je souhaite que le llien n'apparaissent que sur la première occurence d'un mot présent dans $mot contrairement à la mise en exergue.

De mes test, si je limite à une occurence le changement, il me change que le premier mot qu'il rencontre parmi ceux de la liste si je ne veux pas passer par une boucle.

Comment faire pour éviter de créer une boucle en traitant les mots ou expressions séparément avec preg_replace ??


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Sam Juin 03, 2006 21:09

Personne ?


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités