Avatar billede dulius Nybegynder
03. februar 2007 - 15:24 Der er 6 kommentarer og
1 løsning

Finde ord i tekst

Hej.

Jeg står og skal lave et lille script der kan finde et ord i en tekst, og til dette bruger jeg selvfølgelig regular expressions.

Opgaven er desværre ikke HELT så simpel som den lyder, da de ord jeg vil finde ikke altid bare er alene-stående med et mellemrum på hver side.

Hvis vi nu siger jeg vil finde ordet "smed", så er kriteriet, at den har fundet ordet, hvis den finder et sted hvor der står smed, og foran ordet smed er der enten et mellemrum, \, /, -, :, ;, ., et komma eller ingenting og det samme skal der står bagefter ordet. Så den skal altså både kunne finde smed i teksten "her er en smed der er god", "her er en smed, der er god", "her er en smed. han er god", "han er håndværker/smed", "han er håndværker\smed" osv. - you get the point. Indtil videre har jeg fået fiflet mig frem til følgende pattern:
/([\s\\\\,\.:;\-\/])($name)([\s\\\\,\.:;\-\/])/ - hvor $name er en PHP-variabel der indeholder det ord jeg søger efter.

Dette virker også fint nok - NÆSTEN. Den vil bare ikke fange ordet hvis det er det første eller det sidste ord i en sætning, da der jo så ikke står nogen af de angivede tegn foran eller bagefter ordet - der står jo ingenting. Hvordan hulen kan jeg løse dette? Nogen idéer?

Det er ret svært at forklare synes jeg, så hvis det er lidt utydeligt hvad det er jeg egentlig vil, så må I bare spørge, så skal jeg nok prøve at uddybe så godt jeg kan!

På forhånd tak for hjælpen.

Mvh. Julius
Avatar billede coderdk Praktikant
03. februar 2007 - 16:18 #1
Har du prøve /\b($name)\b/ evt /(^|\b)($name)(\b|$)/ ?
Avatar billede dulius Nybegynder
03. februar 2007 - 16:37 #2
/(^|\b)($name)(\b|$)/ ser ud til at virke ret godt - har lige checket det igennem på ca. 50 forskellige eksempler... Og det kan godt fange første ord nu. Men der er stadig ét problem. Hvis man skal søge på ordet "gulve", så fanger den gulve i ordet "trægulve" - det må være fordi den ikke opfatter det danske æ som et bogstav. Kan man gøre noget ved det? For udover det, så ser det ud til at virke perfekt!
Avatar billede coderdk Praktikant
03. februar 2007 - 22:39 #3
Hmm, godt spørgsmål. Den er jeg ikke 100% sikker på - Prøv at lade spørgsmålet stå lidt, måske er der nogen der ved det - Det kan være du skal bruge et specifikt charset i din database... Jeg smider et svar... Som det er nu (hvis der ikke kommer andre), bør du tage nogle af pointene selv ;)
Avatar billede coderdk Praktikant
03. februar 2007 - 22:40 #4
Prøv i øvrigt at smide flg. i toppen af scriptet:

setlocale( LC_ALL, "da", "dan", "danish", "da_DK", "da_DK.ISO88591" );

Det kan være at det får preg til at skifte mening ;)
Avatar billede dulius Nybegynder
04. februar 2007 - 18:48 #5
Undskyld jeg først svarer nu. Det løste probemet med setlocale! Super - mange tak for hjælpen :-) Har accepteret dit svar.
Avatar billede dulius Nybegynder
04. februar 2007 - 18:48 #6
Undskyld jeg først svarer nu. Det løste probemet med setlocale! Super - mange tak for hjælpen :-) Har accepteret dit svar.
Avatar billede coderdk Praktikant
04. februar 2007 - 18:50 #7
Lyder godt :) Tak for alt for mange point ;)
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
Kurser inden for grundlæggende programmering

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