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)
  • Man kan også definere en specifik streng i en alm. parantes.
    • (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}
  • 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:

https://regex101.com/