Avatar billede hkb-x Nybegynder
20. november 2007 - 22:39 Der er 7 kommentarer og
1 løsning

find hele ord med exp

Jeg vil gerne finde samtlige forekomster af et bestemt helt ord og understrege det i en tekst...

Hvis jeg bruger str_replace() kan jeg både understrege samt finde antallet af forekomster. Det eneste problem er at den er lige glad med om det er hele ord eller dele af et ord. Hvis jeg så vil finde hele ord kan jeg jo bare putte et mellemrum på hver sin side af søgeordet men så opstår der problemer med f.eks. ord i slutningen af sætninger hvor der er et '.' direkte efter ordet.

Så hvordan kan jeg finde hele ord på en naturlig måde hvor der ikke opsår problemer med mærkelige tegn før og efter ordene?
Avatar billede nielle Nybegynder
20. november 2007 - 22:51 #1
Sådan?

$tekst = "Hvis jeg bruger str_replace() kan jeg både understrege samt finde antallet af forekomster. Det eneste problem er at den er lige glad med om det er hele ord eller dele af et ord. Hvis jeg så vil finde hele ord kan jeg jo bare putte et mellemrum på hver sin side af søgeordet men så opstår der problemer med f.eks. ord i slutningen af sætninger hvor der er et '.' direkte efter ordet.";

$ordet = 'ord';

$tekst = preg_replace("/\b$ordet\b/", "_$1_", $tekst);

echo $tekst;
Avatar billede hkb-x Nybegynder
20. november 2007 - 22:59 #2
ulempen er at 'ord' forsvinder... hvordan undgår jeg det?
Avatar billede nielle Nybegynder
20. november 2007 - 22:59 #3
Hvad mener du med at det forsvinder?
Avatar billede nielle Nybegynder
20. november 2007 - 23:02 #4
Nååååe, my bad:

$tekst = preg_replace("/\b($ordet)\b/", "_$1_", $tekst);
Avatar billede hkb-x Nybegynder
20. november 2007 - 23:04 #5
jeg har prøvet at fikse lidt rundt med det ud fre bestkrivelsen på php.net: http://dk.php.net/manual/da/function.preg-replace.php

Jeg har ændret koden til den følgende:

$tekst = preg_replace("/\b$ordet\b/", "<u>$ordet</u>", $tekst, -1, $antal);

Og den virker fint bortset fra at $antal er tom... Hvad gør jeg da galt her?
Avatar billede hkb-x Nybegynder
20. november 2007 - 23:09 #6
nice... virker meget bedre... jeg tror at count ikke fungerer da der ikke er php 5.1 på serveren...

er der en anden måde at finde samtlige forekomster af 'ord'...
Avatar billede hkb-x Nybegynder
20. november 2007 - 23:33 #7
hmm... bruger bare str_replace til t tælle ændringer... lidt kluntet men virker perfekt...

Kast et svar for point...
Avatar billede nielle Nybegynder
21. november 2007 - 07:14 #8
Du kan jo bruge preg_replace() til at erstatte med f.eks. XXX:

$tekst = preg_replace("/\b($ordet)\b/", "XXX", $tekst);

Derefter kan du bruge str_replace() til at optælle antallet af forekomster af 'XXX'.

En mulig måde at gøre det på.
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