03. februar 2007 - 15:24Der 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!
/(^|\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!
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 ;)
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.