Seneste forumindlæg
Køb / Salg
 * Uofficiel Black/White liste V3
Login / opret bruger

Forum \ Programmering og webdesign \ Programmering
Denne tråd er over 6 måneder gammel

Er du sikker på, at du har noget relevant at tilføje?

Prob. med regular expression

Af Mega Supporter Dulius | 03-02-2007 15:57 | 871 visninger | 3 svar, hop til seneste
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
--
http://www.juliusmadsen.com[...] julius_madsen (snabelb) hotmail.com
#1
FreakCERS
Mega Nørd
03-02-2007 16:34

Rapporter til Admin
med forbehold for at hol måske sletter et par tegn, her er en indledende forklaring: du bør indsætte tegnet '*' efter de dele der skal findes nul eller flere af, altså: ([\s\\\\,\.:!?;\-\/])*($name)([\s\\\\,\.:!?;\-\/])*/ --
--
The opposite of a correct statement is a false statement. But the opposite of a profound truth may well be another profound truth. -- Niels Bohr
#2
Dulius
Mega Supporter
03-02-2007 16:43

Rapporter til Admin
Den løsning har jeg også selv været ude i, men den dur desværre ikke helt. Hvis man gør det, vil den også fange f.eks. ordet el hvis der står pelle og det skal den jo ikke :( Jeg er dog kommet frem til en lidt anden løsning nu: /(^|\b)($name)(\b|$)/ Wordboundaries (http://www.regular-expressions.info[...] dækker lige præcis mit behov. Men er dog stødt ind i et andet problem nu. Den opfatter tilsyneladende ikke de danske æ, ø og å som bogstaver, så derfor vil den stadig fange f.eks. gulve i ordet trægulve - og det skal den jo heller ikke :( Ved ikke hvordan jeg kommer udover det problem! --
--
MSN: julius_madsen (snabelb) hotmail.com
#3
Dulius
Mega Supporter
04-02-2007 18:58

Rapporter til Admin
Har fået løst problemet. Smed en setlocale( LC_ALL, "da", "dan", "danish", "da_DK", "da_DK.ISO88591" ); op i toppen af scriptet - det fik preg til at ændre mening om hvad der er bogstaver og hvad der ikke er ;-) Tråden er lukket! --
--
MSN: julius_madsen (snabelb) hotmail.com

Opret svar til indlægget: Prob. med regular expression

Grundet øget spam aktivitet fra gæstebrugere, er det desværre ikke længere muligt, at oprette svar som gæst.

Hvis du ønsker at deltage i debatten, skal du oprette en brugerprofil.

Opret bruger | Login
NYHEDSBREV
Afstemning