Regulære uttrykk for mennesker: En praktisk guide
Regulære uttrykk (regex) har et omdømmeproblem. De ser ut som noen sovnet over tastaturet: ^[\w.-]+@[\w-]+\.[\w.]+$. De dukker opp i kodegjennomganger, teksteditorer, søkeverktøy og skjemavalidering. Utviklere elsker dem enten — eller unngår dem fullstendig.
Sannheten ligger et sted imellom. Regex er genuint kraftig. Det er også genuint forvirrende i starten. Men du trenger ikke mestre alle obskure funksjoner for å få praktisk verdi. En håndfull mønstre dekker de aller fleste virkelighetsnære brukstilfeller.
Hva regex faktisk gjør
Et regulært uttrykk er et mønster som beskriver et sett med strenger. Du gir det til et søkeverktøy, og det finner alle strenger som matcher mønsteret. Tenk på det som en veldig presis søkeforespørsel.
Vanlig søk: finn nøyaktig «hei» Regex-søk: finn alt som ser ut som en e-postadresse, et telefonnummer, en dato, en URL, eller et annet mønster du kan beskrive.
Visste du? Regulære uttrykk ble oppfunnet av matematikeren Stephen Kleene i 1956 som en notasjon for å beskrive «regulære språk» i formell språkteori. De fant veien til informatikk gjennom tidlige Unix-teksteditorer på 1960- og 70-tallet.
Byggesteinene
Bokstavelige tegn
Det enkleste regex er bare bokstavelig tekst. Mønsteret hei matcher strengen «hei». Ingenting fancy.
Punktumet (.) — et hvilket som helst enkelt tegn
Et punktum matcher et hvilket som helst enkelt tegn (unntatt linjeskift).
h.tmatcher «hat», «hit», «hot», «hut» og til og med «h3t»
Tegnklasser ([]) — spesifikke tegn
Hakeparenteser definerer et sett av tillatte tegn på den posisjonen.
[aeiou]matcher en hvilken som helst enkelt vokal[0-9]matcher et hvilket som helst siffer[A-Za-z]matcher en hvilken som helst bokstav (stor eller liten)[^0-9]matcher et hvilket som helst tegn som IKKE er et siffer (^inni hakeparenteser betyr «ikke»)
Kvantifikatorer — hvor mange
Disse symbolene kontrollerer repetisjon:
| Symbol | Betydning | Eksempel | Matcher |
|---|---|---|---|
* |
Null eller flere | ab*c |
«ac», «abc», «abbc», «abbbc» |
+ |
Én eller flere | ab+c |
«abc», «abbc», «abbbc» (ikke «ac») |
? |
Null eller én | colou?r |
«color» og «colour» |
{3} |
Nøyaktig 3 | a{3} |
«aaa» |
{2,4} |
Mellom 2 og 4 | a{2,4} |
«aa», «aaa», «aaaa» |
Ankre — posisjon
^i starten betyr «begynnelsen av strengen»$på slutten betyr «slutten av strengen»^hei$matcher bare den eksakte strengen «hei», ikke «si hei» eller «hei verden»
Stenografiske klasser
Vanlige tegnklasser har snarveier:
| Stenografi | Tilsvarende | Betydning |
|---|---|---|
\d |
[0-9] |
Et hvilket som helst siffer |
\w |
[A-Za-z0-9_] |
Et hvilket som helst «ord»-tegn |
\s |
[ \t\n\r] |
Et hvilket som helst mellomrom |
\D |
[^0-9] |
Et hvilket som helst ikke-siffer |
\W |
[^A-Za-z0-9_] |
Et hvilket som helst ikke-ordtegn |
\S |
[^ \t\n\r] |
Et hvilket som helst ikke-mellomrom |
Grupper (()) — gruppering og fangst
Parenteser grupperer deler av et mønster. Dette er nyttig for å bruke kvantifikatorer på en gruppe eller for å hente ut bestemte deler av en match.
(ab)+matcher «ab», «abab», «ababab»(\d{3})-(\d{4})matcher «555-1234» og fanger «555» og «1234» separat
Røret (|) — eller
Røret betyr «eller».
katt|hundmatcher «katt» eller «hund»(jpg|png|gif)matcher hvilken som helst av disse tre bildefilendelsene
Praktiske mønstre du kan bruke i dag
Match en e-postadresse (enkel)
[\w.-]+@[\w-]+\.[\w.]+
Brutt ned:
[\w.-]+— ett eller flere ordtegn, punkter eller bindestreker (den lokale delen)@— bokstavelig @-tegn[\w-]+— ett eller flere ordtegn eller bindestreker (domenet)\.— bokstavelig punktum (escapet fordi.er et spesialtegn)[\w.]+— ett eller flere ordtegn eller punkter (TLD)
Advarsel E-postvalidering med regex er beryktet vanskelig å gjøre perfekt. Det enkle mønsteret ovenfor dekker 99 % av virkelighetsnære e-postadresser, men håndterer ikke hvert edge-tilfelle definert i RFC-spesifikasjonen. Til produksjonsvalidering, bruk programmeringsspråkets e-postvalideringsbibliotek.
Match et telefonnummer (norsk format)
(\+47|0047)?[\s-]?\d{2}[\s-]?\d{2}[\s-]?\d{2}[\s-]?\d{2}
Dette matcher:
- +47 12 34 56 78
- 0047 12345678
- 12 34 56 78
- 12345678
Match en URL
https?://[\w.-]+(/[\w./-]*)?
Dette matcher:
Match en dato (ÅÅÅÅ-MM-DD)
\d{4}-\d{2}-\d{2}
Dette matcher: 2026-03-23, 1999-12-31 osv.
Finn dupliserte ord
\b(\w+)\s+\1\b
Dette matcher gjentatte ord som «den den» eller «er er». \1 refererer tilbake til det som ble fanget av den første gruppen.
Match en IPv4-adresse
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
Dette matcher mønstre som 192.168.1.1 eller 10.0.0.255.
Tips for å skrive regex
1. Start enkelt, raffiner deretter
Ikke prøv å skrive den perfekte regex på første forsøk. Start med et bredt mønster, test det mot dataene dine, og stram det inn.
2. Test alltid
Regex er lett å gjøre galt. En manglende kvantifikator eller et uescapet punktum kan fullstendig endre hva som matcher. Test alltid mønsteret mot virkelighetsnære data før du bruker det i produksjon.
3. Escape spesialtegn
Hvis du trenger å matche et bokstavelig punktum, parentes, hakeparentes eller annet spesialtegn, escape det med en omvendt skråstrek: \., \(, \[.
4. Bruk kommentarer og navngitte grupper
I komplekse mønstre, bruk navngitte grupper og kommentarer (der det støttes) for å gjøre regex lesbart. Fremtidig-deg vil takke deg.
5. Vit når du ikke skal bruke regex
Regex er feil verktøy for å tolke HTML, XML, JSON eller en hvilken som helst nestet struktur. Bruk en riktig parser for disse.
Tips Test og feilsøk regex-mønstrene dine i sanntid: Slik tester du regex-mønstre. Lim inn mønsteret og testdata, og se treff fremhevet øyeblikkelig.
Begynn å teste regex akkurat nå:
Gratis, øyeblikkelig tilbakemelding, og ingen registrering nødvendig.