preg match()

Eléphanteau du PHP | 11 Messages

08 mars 2011, 17:32

Bonjour,

Je voudrais afficher les résultats d'une recherche en affichant le mot recherché en gras et dans son contexte (précédé et suivi de 40 caractères, comme ça se fait beaucoup sur les sites. Et je voudrais que l'utilisateur puisse cliquer sur cette ligne pour être dirigé vers la page qui la contient.

Je galère un peu (m^me beaucoup!) avec la function preg_match()

Comment dois-je la contruire? Ou mettre mon mot recherche en gras?
Actuellement, j'utilise
echo str_replace($mot, "<strong>$mot</strong>", $para['paragraphe']);
qui me ramène le paragraphe entier qui contient le mot recherché. Or, je ne voudrais seulement qu'un peu de texte autour de mon mot recherché, qui doit apparaître en gras.

Merci de votre aide!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 mars 2011, 18:06

salut,

je suppose que tu n'avait assez de réponse dans le 1er message ? post351253.html#p351253

tu peut faire ce que tu veut avec
- strpos
- substr

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 11 Messages

08 mars 2011, 18:32

Merci pour ta réponse, j'ai regardé avec attention mais c'est bien preg match() qu'il me faut car je ne connais pas les caractères qui vont sortir. Connais tu un peu cette fonction et surtout le masque à appliquer? Merci encore

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 mars 2011, 20:34

il te faut preg_match oui et non ton masque étant "fixe" (ce sera toujours un mot) tu peut très bien utiliser str_replace afin d'aller plus vite et d'alléger le traitement.

et oui ton masque est fixe car même si le mot est fixe il ne contiendra pas de caractère "joker". Preg_match serais utile si tu cherchais un type de mot (je veux les mot de 6 caractères alapha numérique quelqu'il soit, par exemple).

donc
- str_replace pour changer le mot dans le texte par ce même mot en gras
- substr pour ne prend qu'une partie du texte retourné (il me semble que c'est réalisable avec mysql mais j'ai pas recherché plus ;))
- stpos va te permettre d'initialiser ton substr

après pour être très fin il faut que tu cherche si le caractère X que tu va mettre en début de substr est un "caractère blanc" (espace, saut de ligne, retour chariot, tabulation) afin d'éviter de couper un caractère.

enfin voila comment j'orienterais la chose avec des fonctions "simple".

@+
Il en faut peu pour être heureux ......

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 mars 2011, 21:50

Modération :
Le multipostage est interdit sur le forum.

Ce sujet a été verrouillé et sera supprimé sous peu.
Des réponses peuvent être apportées à cette adresse :
php-debutant/preg-match-t257702.html#p351269

Merci de prendre le temps de lire les règlements.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...