Récupérer la phrase complète contenant le mot recherché

Récupérer la phrase complète contenant le mot recherché - PHP - Programmation

Marsh Posté le 30-12-2003 à 17:48:41    

Je fait un rechercher via un formulaire dans un champ blob de ma table 'tablo'.
 
Lorsque mon string 'str' est trouvé dans mon champ 'field' de ma table 'tablo', par cette requête :

Code :
  1. select id from `tablo` where field like '%str%';


J'aimerais qu'il me retourne les mots qui se trouvent avant et après la réponse... comment que je peux faire ??


Message édité par xkamui le 31-12-2003 à 11:54:18
Reply

Marsh Posté le 30-12-2003 à 17:48:41   

Reply

Marsh Posté le 30-12-2003 à 17:52:14    

une fois que t'as ton résultat, en PHP, tu recherches la position de la chaîne recherchée. Ensuite, tu prends x caractères avant et x caractères après. Tu peux améliorer l'algo pour rechercher les espaces, mais ça devient chaud à faire.
 
J'avais fait ça en ASP, et j'avoue que j'ai bien galèré pour obtenir un truc qui tienne la route...

Reply

Marsh Posté le 30-12-2003 à 18:13:25    

avec une expression reguliere c plus simple...

Reply

Marsh Posté le 31-12-2003 à 09:29:09    

fabien a écrit :

avec une expression reguliere c plus simple...


 
tu pourrais dévellopper ??


Message édité par xkamui le 31-12-2003 à 09:29:21
Reply

Marsh Posté le 31-12-2003 à 13:31:29    

J'ai pas tout compris à ta question quand même ...
 
Si tu fais un "select id from" il ne te recupere que l'id non ?
 
Le texte que tu veux récuperer il est où ? Dans le champs field ?
 
Tu ne peux pas plutot faire SELECT id,field FROM 'tablo' WHERE field LIKE '%str%' ?
 
Enfin je dis ça, mais j'ai pas très bien compris ce que tu cherches à faire exactement :(
 
++


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 31-12-2003 à 14:01:39    

en fait, je récupère exactement ça :  

Code :
  1. SELECT id, rub, srub, nom, texte from `sortie` WHERE texte like '%menu%'


Et ce que je veux c'est chopper les mots qui encadrent le mot 'menu', histoire de remettre menu dans le contexte, pour qu'il ne soit pas pris pour un autre comme par exemple le mot 'menuet' qui répond aux critères de recherche, mais qui ne correspond pas trop :p

Reply

Marsh Posté le 31-12-2003 à 14:09:11    

xkamui a écrit :

en fait, je récupère exactement ça :  

Code :
  1. SELECT id, rub, srub, nom, texte from `sortie` WHERE texte like '%menu%'


Et ce que je veux c'est chopper les mots qui encadrent le mot 'menu', histoire de remettre menu dans le contexte, pour qu'il ne soit pas pris pour un autre comme par exemple le mot 'menuet' qui répond aux critères de recherche, mais qui ne correspond pas trop :p

en php regarde les fonctions comme preg_match http://fr.php.net/preg_match  

Reply

Marsh Posté le 31-12-2003 à 14:25:46    

Je viens de regarder preg_match... et je t'avoue que je comprend pas tout...
 
Je vois qu'il faut que je lui donne un 'pattern' du type
'([a-zA-Z0-9]) ([a-zA-Z0-9]) ".$string." ([a-zA-Z0-9]) ([a-zA-Z0-9])' pour qu'il me prenne les deux chaines de caractères qui précédent et qui suivent...
 
mais c'est de l'afficher que je saisi pas...
 
j'ai fait ça, sans grande conviction :  

Code :
  1. $context = preg_match ("[a-zA-Z0-9] [a-zA-Z0-9] ".$str[0]." [a-zA-Z0-9] [a-zA-Z0-9]", $nfo[4]);          <= ligne 105
  2. $txt .= "position : " . $context . "<br />";


et il se trouve que ça ne m'écrit que :

Code :
  1. Warning: Unknown modifier '[' in /www/siteweb/tours-malin.com/htdocs/url/search/search.php on line 105

Reply

Marsh Posté le 31-12-2003 à 15:26:22    

si je crois comprendre ce que tu me dis, c'est de rechercher avec preg_match si l'occurence est présente dans mon texte...
 
Cependant, elle est forcément présente, puisqu'elle à été sélectionnée avec ma condition de recherche...
 
donc en faite, ce qu'il me faudrait c'est 'juste' les 4 mots qui l'encadre...
 
je devient fou [:tilleul]  [:toukc]


Message édité par xkamui le 31-12-2003 à 15:36:08
Reply

Marsh Posté le 31-12-2003 à 15:43:48    

xkamui a écrit :

si je crois comprendre ce que tu me dis, c'est de rechercher avec preg_match si l'occurence est présente dans mon texte...
 
Cependant, elle est forcément présente, puisqu'elle à été sélectionnée avec ma condition de recherche...
 
donc en faite, ce qu'il me faudrait c'est 'juste' les 4 mots qui l'encadre...
 
je devient fou [:tilleul]  [:toukc]  

essaye avec la fonction ereg(), ou bien une façon bourin, tu utilise explode() avec comme separateur ton mot.

Reply

Marsh Posté le 31-12-2003 à 15:43:48   

Reply

Marsh Posté le 31-12-2003 à 15:53:04    

fabien a écrit :

essaye avec la fonction ereg(), ou bien une façon bourin, tu utilise explode() avec comme separateur ton mot.


 
Je suppose que c'est du grand n'importe quoi ça :
$affichage = ereg((.*)(.{10})(son_mot)(.{10})(.*),$toutletexte,\\2\\3\\4);
echo $affichage;
 
J'ai un peu oublié comment marchait les expressions regulieres depuis hier ...
 
Les trucs de base je me debrouille, mais des que ca devient compliqué ... :D
:lol:


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 31-12-2003 à 15:57:32    

Euh, je crois que c'est plutot ça en fait :
 
ereg((.*)(.{10})(son_mot)(.{10})(.*),$toutletexte,$affichage);
echo $affichage[2].$affichage[3].$affichage[4];
 
non ?


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 31-12-2003 à 16:14:27    

D'ailleurs (on voit que je suis pas expert hein ?) cela suffit peut etre :
 
ereg((.{10})(le_mot)(.{10}),$toutletexte,$aff);
echo $aff[1].$aff[2].$aff[3];
 
$toutletexte etant la valeur récuperée dans ta colonne "texte" de ta BDD.
 
++


Message édité par Dj YeLL le 31-12-2003 à 16:15:02

---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 31-12-2003 à 16:18:51    

tu sais que la fonction "edit" existe ? :D

Reply

Marsh Posté le 31-12-2003 à 16:19:59    

Dj YeLL a écrit :

D'ailleurs (on voit que je suis pas expert hein ?) cela suffit peut etre :
 
ereg((.{10})(le_mot)(.{10}),$toutletexte,$aff);
echo $aff[1].$aff[2].$aff[3];
 
$toutletexte etant la valeur récuperée dans ta colonne "texte" de ta BDD.
 
++

et puis pourquoi tu limite a 10 caracteres ?

Reply

Marsh Posté le 31-12-2003 à 16:22:07    

Citation :

tu sais que la fonction "edit" existe ?


 
Oui, désolé :D
 

Citation :

et puis pourquoi tu limite a 10 caracteres ?


 
Bah parcequ'il a dit qu'il voulait un peu avant et un peu apres ...
 
Mais sinon c'est pas bon ? Plus dans la forme que dans le fond :p


---------------
Gamertag: CoteBlack YeLL
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed