Regulære udtryk for alle: En praktisk guide
Regulære udtryk (regex) har et omdømmeproblem. De ligner noget, nogen har skrevet, da de faldt i søvn over tastaturet: ^[\w.-]+@[\w-]+\.[\w.]+$. De optræder i code reviews, teksteditorer, søgeværktøjer og formularvalidering. Udviklere enten elsker dem eller undgår dem fuldstændigt.
Sandheden ligger et sted imellem. Regex er genuint kraftfuldt. Det er også genuint forvirrende i starten. Men du behøver ikke at mestre alle obskure funktioner for at få praktisk udbytte. En håndfuld mønstre dækker langt størstedelen af reelle anvendelsestilfælde.
Hvad regex faktisk gør
Et regulært udtryk er et mønster, der beskriver et sæt strenge. Du giver det til et søgeværktøj, og det finder alle strenge, der matcher mønsteret. Tænk på det som en meget præcis søgeforespørgsel.
Normal søgning: find præcis "hej" Regex-søgning: find alt, der ligner en mailadresse, et telefonnummer, en dato, en URL eller et andet mønster, du kan beskrive.
Vidste du? Regulære udtryk blev opfundet af matematikeren Stephen Kleene i 1956 som en notation til beskrivelse af "regulære sprog" i formel sprogteori. De fandt vej til computing via tidlige Unix-teksteditorer i 1960'erne og 1970'erne.
Byggestenene
Bogstavelige tegn
Den enkleste regex er bare bogstavelig tekst. Mønsteret hej matcher strengen "hej." Intet kompliceret.
Prikken (.) — Et vilkårligt enkelt tegn
En prik matcher et vilkårligt enkelt tegn (undtagen linjeskift).
h.tmatcher "hat," "hit," "hot," "hut" og endda "h3t"
Tegnklasser ([]) — Specifikke tegn
Firkantede parenteser definerer et sæt tilladte tegn på den position.
[aeiou]matcher en vilkårlig enkelt vokal[0-9]matcher et vilkårligt ciffer[A-Za-z]matcher et vilkårligt bogstav (stor eller lille)[^0-9]matcher et vilkårligt tegn, der IKKE er et ciffer (^inden i parenteser betyder "ikke")
Kvantifikatorer — Hvor mange
Disse symboler styrer gentagelse:
| Symbol | Betydning | Eksempel | Matcher |
|---|---|---|---|
* |
Nul eller flere | ab*c |
"ac," "abc," "abbc," "abbbc" |
+ |
En eller flere | ab+c |
"abc," "abbc," "abbbc" (ikke "ac") |
? |
Nul eller en | colou?r |
"color" og "colour" |
{3} |
Præcis 3 | a{3} |
"aaa" |
{2,4} |
Mellem 2 og 4 | a{2,4} |
"aa," "aaa," "aaaa" |
Ankre — Position
^i starten betyder "begyndelsen af strengen"$i slutningen betyder "slutningen af strengen"^hej$matcher kun den præcise streng "hej," ikke "sig hej" eller "hej verden"
Stenografi-klasser
Almindelige tegnklasser har genveje:
| Stenografi | Ækvivalent | Betydning |
|---|---|---|
\d |
[0-9] |
Et vilkårligt ciffer |
\w |
[A-Za-z0-9_] |
Et vilkårligt "ord"-tegn |
\s |
[ \t\n\r] |
Vilkårligt mellemrum |
\D |
[^0-9] |
Et vilkårligt ikke-ciffer |
\W |
[^A-Za-z0-9_] |
Et vilkårligt ikke-ord-tegn |
\S |
[^ \t\n\r] |
Vilkårligt ikke-mellemrum |
Grupper (()) — Gruppering og opfangning
Parenteser grupperer dele af et mønster. Det er nyttigt til at anvende kvantifikatorer på en gruppe eller til at udtrække specifikke dele af et match.
(ab)+matcher "ab," "abab," "ababab"(\d{3})-(\d{4})matcher "555-1234" og opfanger "555" og "1234" separat
Pipe-tegnet (|) — Eller
Pipe-tegnet betyder "eller."
kat|hundmatcher "kat" eller "hund"(jpg|png|gif)matcher en af disse tre billedudvidelser
Praktiske mønstre, du kan bruge i dag
Match en mailadresse (simpel)
[\w.-]+@[\w-]+\.[\w.]+
Opdelt:
[\w.-]+— et eller flere ord-tegn, prikker eller bindestreger (den lokale del)@— bogstaveligt @-tegn[\w-]+— et eller flere ord-tegn eller bindestreger (domænet)\.— bogstavelig prik (escaped fordi.er et specialtegn)[\w.]+— et eller flere ord-tegn eller prikker (TLD'en)
Advarsel Mailadressen validering med regex er notorisk svær at gøre perfekt. Det simple mønster ovenfor dækker 99% af virkelige mailadresser, men håndterer ikke alle edge cases defineret i RFC-specifikationen. Til produktionsvalidering, brug dit programmeringssprog's mailvalideringsbibliotek.
Match et telefonnummer (dansk format)
\+?45[\s-]?\d{2}[\s-]?\d{2}[\s-]?\d{2}[\s-]?\d{2}
Matcher f.eks.:
- +45 12 34 56 78
- 12 34 56 78
- 12345678
Match en URL
https?://[\w.-]+(/[\w./-]*)?
Matcher:
Match en dato (ÅÅÅÅ-MM-DD)
\d{4}-\d{2}-\d{2}
Matcher: 2026-03-23, 1999-12-31 osv.
Find duplikerede ord
\b(\w+)\s+\1\b
Matcher gentagne ord som "den den" eller "er er." \1 refererer tilbage til det, der blev opfanget af den første gruppe.
Match en IPv4-adresse
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
Matcher mønstre som 192.168.1.1 eller 10.0.0.255.
Tips til at skrive regex
1. Start enkelt, forfin derefter
Forsøg ikke at skrive det perfekte regex ved første forsøg. Start med et bredt mønster, test det mod dine data og stram det op.
2. Test altid
Regex er let at fejlskrive. En manglende kvantifikator eller en unescaped prik kan fuldstændigt ændre, hvad der matches. Test altid dit mønster mod virkelige data, inden du bruger det i produktion.
3. Escape specialtegn
Hvis du skal matche en bogstavelig prik, parentes, klamme eller et andet specialtegn, skal du escape det med en backslash: \., \(, \[.
4. Brug kommentarer og navngivne grupper
I komplekse mønstre, brug navngivne grupper og kommentarer (hvor understøttet) for at gøre regex'et læsbart. Dit fremtidige jeg vil takke dig.
5. Vid hvornår du ikke skal bruge regex
Regex er det forkerte værktøj til at parse HTML, XML, JSON eller enhver indlejret struktur. Brug en ordentlig parser til disse.
Tip Test og debug dine regex-mønstre i realtid: Sådan tester du regex-mønstre. Indsæt dit mønster og testdata, og se matches fremhævet med det samme.
Begynd at teste regex nu:
Gratis, øjeblikkelig feedback og ingen registrering nødvendig.