Limiter la taille d'un texte [Résolu]

Signaler
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013
-
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013
-
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

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
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
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

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 !!!
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
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
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

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'
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

Pardon, autant pour moi ça fonctionne bien !!!

Par contre, ça ne prends pas en compte les accents et la ponctuation
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

... 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 !!!
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

Impeccable, Merci !!!!!!!!!!!!