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

cs_joebuz 321 Messages postés samedi 12 février 2005Date d'inscription 21 février 2013 Dernière intervention - 14 mars 2008 à 16:05 - Dernière réponse : cs_joebuz 321 Messages postés samedi 12 février 2005Date d'inscription 21 février 2013 Dernière intervention
- 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
Afficher la suite 

7 réponses

Répondre au sujet
neigedhiver 2492 Messages postés jeudi 30 novembre 2006Date d'inscription 14 janvier 2011 Dernière intervention - 15 mars 2008 à 18:30
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de neigedhiver
cs_joebuz 321 Messages postés samedi 12 février 2005Date d'inscription 21 février 2013 Dernière intervention - 14 mars 2008 à 17:19
0
Utile
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 !!!
Commenter la réponse de cs_joebuz
neigedhiver 2492 Messages postés jeudi 30 novembre 2006Date d'inscription 14 janvier 2011 Dernière intervention - 14 mars 2008 à 17:59
0
Utile
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
Commenter la réponse de neigedhiver
cs_joebuz 321 Messages postés samedi 12 février 2005Date d'inscription 21 février 2013 Dernière intervention - 15 mars 2008 à 10:53
0
Utile
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'
Commenter la réponse de cs_joebuz
cs_joebuz 321 Messages postés samedi 12 février 2005Date d'inscription 21 février 2013 Dernière intervention - 15 mars 2008 à 11:09
0
Utile
Pardon, autant pour moi ça fonctionne bien !!!

Par contre, ça ne prends pas en compte les accents et la ponctuation
Commenter la réponse de cs_joebuz
cs_joebuz 321 Messages postés samedi 12 février 2005Date d'inscription 21 février 2013 Dernière intervention - 15 mars 2008 à 14:53
0
Utile
... 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 !!!
Commenter la réponse de cs_joebuz
cs_joebuz 321 Messages postés samedi 12 février 2005Date d'inscription 21 février 2013 Dernière intervention - 15 mars 2008 à 20:37
0
Utile
Impeccable, Merci !!!!!!!!!!!!
Commenter la réponse de cs_joebuz

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.