Avatar billede nikrasitf Nybegynder
10. januar 2003 - 14:57 Der er 10 kommentarer og
1 løsning

RegExp Search... yet again

Hej,
jeg har f.eks. følgende streng

0123456789 abc def hij

og vil finde den først del af strengen som er valid,
men en regexp syntax der skulle sige...

find en tekst som starter med "abc" og har et ellet andet imellem "hij" som er slutningen på stykket.

Søgte lidt rundt på nettet og fandt frem til denne regexp-sætning...

abc((\w+)|(\W+))hij

MEN! Den er kun valid hvis enten alle chars'ene imellem abc og hij er chars eller non-chars.. ikke noget med både det ene og det andet. :(
Avatar billede iqzero Nybegynder
10. januar 2003 - 15:11 #1
abc[\w\W]*hij
Avatar billede iqzero Nybegynder
10. januar 2003 - 15:15 #2
[etellerandet] er det man kalder en character class. Alt indenfor det er sandt. det vil sige at [etellerandet] matcher e, t, e, l, l, e, r, a, n, d, e og t.

med [\w\W] siger jeg: match alle word-karakterer, samt alle non-word karakterer. * efter [\w\W] betyder match denne karakterklasse nul eller flere gange. Du kan også bruge + i stedet for * - det betyder, match mindst én gang, men også flere.
Avatar billede iqzero Nybegynder
10. januar 2003 - 15:16 #3
I den du brugte, abc((\w+)|(\W+))hij, indgår |. | er et logisk OR - 'eller'. Som du selv opdagede, må kun en af dem matche.
Avatar billede Slettet bruger
10. januar 2003 - 15:21 #4
abc.*hij$
Avatar billede nikrasitf Nybegynder
10. januar 2003 - 15:27 #5
Mange tak, jeg prøvede faktisk også den model med dog ikke med [ ] men med ( ).

Og ja, den OR var ikke helt som troede.

Nu sidder jeg så bare og tænker på at der er temmelig langt fra
(\w+)|(\W+) til [\w\W]* som er så tæt på hinanden funktions-mæssigt.
Men så'en er RegExp nu bare, selvom man kunne tro at [\w\W]* kunne laves med (\w+)||(\W+) for at fortælle at de kunne være mixed.

Men pyt, jeg har dog fået en langt bedre opfattelse af hvordan RegExp fungere, siden jeg startede :)
Avatar billede iqzero Nybegynder
10. januar 2003 - 15:31 #6
jjust, korrekt, men den vil normalt ikke matche newline, selv med m specificeret. Det gør [\w\W]...
Avatar billede iqzero Nybegynder
10. januar 2003 - 15:33 #7
Man lærer jo hurtigt. jeg håber du kunne bruge min forklaring - jeg regnede med du gerne ville have andet end bare en regular expression smidt i hovedet ;)
Avatar billede nikrasitf Nybegynder
10. januar 2003 - 16:15 #8
Har endnu en lille ting, som lige kom i tanken da jeg så du skrev newline :)

http://www.eksperten.dk/spm/303531
Avatar billede Slettet bruger
10. januar 2003 - 16:52 #9
Ups ja, havde lige overset at . ikke matcher newline.
Avatar billede nikrasitf Nybegynder
10. januar 2003 - 16:57 #10
. matcher fint newline her
Avatar billede Slettet bruger
10. januar 2003 - 17:00 #11
Måske, jeg sidder med perl-pattern-matching specifikationen, og den siger at . ikke matcher newline.
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