Avatar billede kentora Nybegynder
10. oktober 2010 - 15:08 Der er 11 kommentarer og
1 løsning

Udvælge tegn omkring et søgeord

Hej.

Jeg er ved at lave en søgemaskine, og vil gerne vide hvordan man kan lave så resultaterne vises med ca. 75 tegn på hver side af det ord man søger efter, ligesom på google.
Avatar billede jantzen88 Nybegynder
10. oktober 2010 - 15:27 #1
Du kan bruge substr til det... men den splitter midt i en sætning.

substr($string, 0, 75);
Avatar billede w13 Novice
10. oktober 2010 - 18:26 #2
Avatar billede w13 Novice
10. oktober 2010 - 18:28 #3
Eksempelvis denne kode, som virker rigtig godt for spørgeren:

<?php

$string = "I was just wondering how i would write effecient/nice/clean PHP code for taking 4-5 words around a matched keyword in a string which contains the contents of a text file and then display the results in a similar fashion as google.";

$word = "just";

preg_match("/(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?$word ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)?/i",$string,$result);

print preg_replace("/$word/","<B>$word</B>",$result[0]);

?>
Avatar billede w13 Novice
10. oktober 2010 - 18:29 #4
Den outputter:

I was just wondering how i would write effecient
Avatar billede kentora Nybegynder
11. oktober 2010 - 04:06 #5
Super. mange tak w13. Smid lige et svar, så får du point!

Der kan gå lidt tid, lige nu sidder jeg i toget på vej mod lufthavnen...
Avatar billede w13 Novice
11. oktober 2010 - 08:27 #6
Kommer her! :)
Avatar billede Slettet bruger
11. oktober 2010 - 18:11 #7
WOW, det var satans - Det havde jeg opgivet på forhånd som for ressourcekrævende i min søgning.
- Tak herfra, også  : D

Kan du forud..skikke hvad den returnerer hvis $word optræder mere end én gang i $string ?
Avatar billede w13 Novice
11. oktober 2010 - 20:14 #8
T4NK3R>> Den fik jeg ikke lige fat i? Altså hver forekomst af $word placeres som et array-item i $result - med tilhørende omkransende ord. Så du har $result[0], $result[1], osv. Så vil have første forekomst, tager du $result[0], vil du have sidste, tager du end($result).
Avatar billede Slettet bruger
11. oktober 2010 - 21:05 #9
Men hvordan skulle den kunne skelne ?
- Hvis jeg bruger eksemplet - men "søger" efter et $word som findes flere gange i $string - f.eks:

<?php

$string = "I was just wondering how i would write effecient/nice/clean PHP code for taking 4-5 words around a matched keyword in a string which contains the contents of a text file and then display the results in a similar fashion as google.";

$word = " in ";

preg_match("/(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?$word ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)?/i",$string,$result);

print preg_replace("/$word/","<B>$word</B>",$result[0]);

?>

returneres: "words around a matched keyword in a string which contains the"
- Hvilket absolut er brugbart!

Men den ser jo altså kun første af de 2 forekomster af " in "

PS: Jeg har sat mellemrummer omkring, for ellers returnerer den:
"I was just wondering how i would write"

Altså faktisk 2 problemer:
- vis begge forekomster og deres "omgivelser".
- find kun "ord" ikke dele af ord.
Avatar billede cronaldo Nybegynder
11. oktober 2010 - 22:58 #10
T4NK3R:

Brug preg_match i stedet.. den er meget hurtigere, og den skulle også gerne matche alle forekomster af søgeteksten.
Avatar billede Slettet bruger
20. oktober 2010 - 10:48 #11
UPS - undskyld cronaldo. Så ikke du havde kommenteret..

Men det ER jo faktisk preg_match der bruges i w13's post.. ?
Avatar billede w13 Novice
20. oktober 2010 - 11:01 #12
Cronaldo>> Ja, det vil jeg også mene? :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester