Limiter la taille d'un texte

Résolu
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013 - 14 mars 2008 à 16:05
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013 - 15 mars 2008 à 20:37
Bonjour,
pour un moteur de recherche, je cherche à couper le texte environ 5 mots avant et apres le mot recherché.

pour rechercher un mot ou une expression dans un texte, j'utilise :

$search = la recherche client
$resume = le texte dans lequel la recherce se fait

$mots = explode(' ', $search);
  foreach($mots as $mot) {
   $replace2=' '.$mot.' ';
   $resume2 = str_replace($mot,$replace2,$resume);
}

Ceci me permet de changer la couleur des mots recherché ($search) dans le texte ($resume)
le probleme est que le texte est tres long et que j'ai pas envie de tout renvoyer, juste une ligne avec le mot recherché serait suffisant.

Ex d'affichage souhaité :

....blabla bla bla bla bla blabla blablblabla bla bn la labl blablb ....

merci

7 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 mars 2008 à 18:30
Salut,

Essaie ce motif : `(\b(?:[^\s]+\s){0,5}le(?:\s[^\s]+){0,5}\b)`

Remis dans le code que je t'avais donné, ça donne ça :

preg_match_all(sprintf('`(\b(?:[^\s]+\s){0,5}%s(?:\s[^\s]+){0,5}\b)`', $mot_a_trouver), $chaine_ou_chercher, $matches);

\w est un caractère de mot : a priori, il ne prend pas en compte la ponctuation. Je l'ai donc remplacé par [^\s] qui accepte tous les caractères sauf les caractères d'espacement (espace, tab, etc).
Et avec l'option de recherche i, la recherche n'est pas sensible à la casse :

preg_match_all(sprintf('`(\b(?:[^\s]+\s){0,5}%s(?:\s[^\s]+){0,5}\b)`i', $mot_a_trouver), $chaine_ou_chercher, $matches);

<hr size="2" width="100%" />Neige
3
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
14 mars 2008 à 17:19
ya bien la fonction substr()

$echo_resume = substr($resume, 0, 25);
$combien =strlen($resume);
if($combien <= 25){
$affich = " ".$echo_resume."
";}
else{
$affich = " ".$echo_resume."...
";}

echo $affich;

mais le probleme c'est que ça coupe uniquement le texte à un endroit precis et non à un endroit variable, il faudrait pouvoir appliquer la fonction substr($resume, 5, -5); par exemple ou 5 et -5 sont definis à partir de $mot !
mais ça je sais pas faire !!!
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 mars 2008 à 17:59
Salut,

Cherche du côté des expressions régulières :
- http://fr.php.net/pcre
- http://lumadis.be/regex/tuto_pcre.php

Je suis sûûûûr que tu y trouveras ton bonheur.

Allez, t'as de la chance, j'adore les PCRE :

preg_match_all(sprintf('`(\b(?:\w+\s){0,5}%s(?:\s\w+){0,5}\b)`', $mot_a_trouver), $chaine_ou_chercher, $matches);

Logiquement, ça le fait, si je ne me suis pas planté en recopiant ici...
Pour l'explication de comment pourquoi, je te renvoies sur le tuto donné en lien ci-dessus.

<hr size="2" width="100%" />Neige
0
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
15 mars 2008 à 10:53
j'ai essayé ça (pour essai):

preg_match_all(sprintf('`(\b(?:\w+\s){0,5}%s(?:\s\w+){0,5}\b)`', $search), $descriptif, $matches);

echo $matches[0][0]."
".$matches[0][1]."
".$matches[0][2]."
".$matches[0][3]."
";

ça me renvoie bien le mot cherché $search dans le texte $descriptif, mais uniquement le mot cherché et pas le texte qui entoure ce mot.
De plus ça ne fonctionne pas avec une recherche avec plusieurs mots ex : $search = 'afficher texte'
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
15 mars 2008 à 11:09
Pardon, autant pour moi ça fonctionne bien !!!

Par contre, ça ne prends pas en compte les accents et la ponctuation
0
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
15 mars 2008 à 14:53
... et le probleme c'est que ça coupe à la moindre ponctuation ou accents, j'ai lu les tutos (pas tout compris), et je ne vois pas comment faire pour prendre en compte au moins les accents pour avoir les motes en entier ! et avec la ponctuation ça serait le top !!!
0
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
15 mars 2008 à 20:37
Impeccable, Merci !!!!!!!!!!!!
0
Rejoignez-nous