Generelle Regex "termer"
En kort oversigt over nogle af de mest gængse regex termer.
- . (et punktum) i regex, betyder "ét vilkårligt tegn" (Gælder alle tegn, undtagen linjeskift)
- \d (Backslash og d) i regex, betyder "ét vilkårligt tal" (0-9)
- \w (Backslash og w) i regex, betyder "ét vilkårligt 'word'-tegn" (a-z, A-Z, 0-9 og _)
- Man kan selv definere en range man ønsker at matche på ved at putte tegn i en firkantet parentes:
- en række tegn [abcd]
- en range [a-d]
- Både en range og et tegn [a-cd]
- alle de 3 eksempler matcher et bogstav som er enten "a, b, c eller d"
(men ikke "A, B, C og D" store og små bogstaver er ikke det samme i RegEx, for at matche på store bogstaver angives blot store bogstaver, [AbCd] match stort A og C og små b og d)
- alle de 3 eksempler matcher et bogstav som er enten "a, b, c eller d"
- Man kan også definere en specifik streng i en alm. parantes.
- (Test) - matcher kun ordet test med stort start bogstav.
- (Test) - matcher kun ordet test med stort start bogstav.
- Hvis man vil kvantificere at man fx vil matche flere tegn af samme type i flere gange i træk så kan man kombinere overnævnte metoder med et kvantificerings tegn:
- * (en stjerne) i regex, betyder mellem "0 og uendelige" gange
- ? (et spørgsmålstegn) i regex, betyder mellem "0 eller 1" gange.
- + (et plus) i regex, betyder mellem "1 eller uendelige" gange
- {} (Tuborg klammer) med denne kan du selv definere min. og max antal gange
- i en {} kan man skrive to tal, adskilt af et , (komma), det første tolkes som minimum det sidste som maximum, man skal angive et minimum men man kan undlade at definere et max, hvis man fx vil matche med uendeligt.
- {3,4} - matcher mellem 3 og 4 gange
- {6} - matcher præcist 6 gange
- {12,} - matcher mellem "12 og uendelige" gange
- Man kan så kombinere et wildcard, en range eller en streng med en kvantificering som fx:
- .? - matcher 0 eller 1 forekomst af et hvilket som helst tegn
- \d* - matcher 0 eller uendelige antal tal
- [abcd]{4} - matcher præcist 4 bogstaver som er enten a, b, c eller d,
- fx aaaa, abba eller adcb,
- men ikke aaa, afdc eller ab2c
- Man kan så sammensætte disse til at beskrive specifikke mønstre.
- et CPR nummer er opbygget af 2 grupper af tal, først 6 cifre så 4 cifre, og måske er de adskilt af et mellemrum eller en bindestreg, dette kunne udtrykkes sådan her: \d{6}[ -]?\d{4}
(bemærk at dette er en MEGET oversimplificering af at CPR nummer og dette ikke burde benyttes som et CPR tjek) - et telefonnummer kunne være 8 cifre, men måske med +45 eller 0045 foran, det kunne fx udtrykkes sådan her:
(\+45[ ]?|0045[ ]?)?\d{8}
- et CPR nummer er opbygget af 2 grupper af tal, først 6 cifre så 4 cifre, og måske er de adskilt af et mellemrum eller en bindestreg, dette kunne udtrykkes sådan her: \d{6}[ -]?\d{4}
- Der er 2 andre karaktere som jeg lige vil nævne:
- ^ - Bruges til at definere at dit udtryk skal findes i starten af strengen for at matche
- $ - Bruges til at definere at dit udtryk skal findes i slutningnen af strengen for at matche
Hvis du gerne vil matche på to strenge i en regel fremfor at lave 2 regler...
i regex kan du angive begge de strenge du vil matche på med en "pipe" ( | ) imellem, så matches der både på den ene og den anden værdi.
Eksempel:
Test|Tæst
Vil matche både "Test" og "Tæst", men ikke "Tast"...
Hvis man ønsker at matche på flere end 2 ord, kan man blot angive flere pipe symboler:
Test|Tæst|Tast|Tyst
Man kunne i dette tilfælde også forkorte det til:
T[eæay]st
Hvis man gerne vil matche på en streng hvor nogle karaktere skiftes ud fra gang til gang...
Fx hvis man ofte får mails som hedder "Noget tekst CaseId:1234567890 Noget mere tekst Att:Gustav fra marketing"
Så kunne man fx definere et regex som fanger emnerne som starter med "Noget tekst CaseId:" + "En masse ikke faste karaktere" + " Att:Gustav fra marketing"
...Så kunne eksemplet se sådan her ud:
Noget tekst CaseId:.* Att:Gustav fra marketing
Ydermere kunne man forestille sig at man ønskede at sende mails som slutter på "Att:Gustav fra marketing" til Gustav, men ikke dem som slutter på "Att:Ida-Marie fra HR", her skal man lave 2 regler, én som matcher "Att:Gustav fra marketing" og én anden som så i stedet matcher "Att:Ida-Marie fra HR".
OBS:
Brug af specielle karaktere i regex udtryk...
Hvis fx du ønsker at matche strengen: Test.
Og du blot angiver "Test." som dit regex, så er . jo det samme som et wildcard, og matcher punktum, men også en masse andre karaktere.
For kun at matche på det specifikke tegn, foranstiller man en \ (Backslash) foran det tegn du du ønsker at matche på.
eksempel:
\.
eller
\[Test\]
Du kan lærer meget mere om RegEx, samt teste dine udtryk, på denne side: