Reguljära uttryck för vanliga människor: En praktisk guide
Reguljära uttryck (regex) har ett ryktesproblem. De ser ut som om någon somnade på tangentbordet: ^[\w.-]+@[\w-]+\.[\w.]+$. De dyker upp i kodgranskningar, textredigerare, sökverktyg och formulärvalidering. Utvecklare antingen älskar dem eller undviker dem helt.
Sanningen ligger någonstans däremellan. Regex är genuint kraftfullt. Det är också genuint förvirrande till en början. Men du behöver inte bemästra varje obskyr funktion för att få praktiskt värde. En handfull mönster täcker den stora majoriteten av verkliga användningsfall.
Vad regex faktiskt gör
Ett reguljärt uttryck är ett mönster som beskriver en uppsättning strängar. Du ger det till ett sökverktyg och det hittar varje sträng som matchar mönstret. Tänk på det som en mycket precis sökfråga.
Normal sökning: hitta exakt "hej" Regex-sökning: hitta allt som ser ut som en e-postadress, ett telefonnummer, ett datum, en URL eller vilket mönster du kan beskriva.
Visste du att? Reguljära uttryck uppfanns av matematikern Stephen Kleene 1956 som en notation för att beskriva "reguljära språk" i formell språkteori. De tog sig in i datoranvändning via tidiga Unix-textredigerare på 1960- och 1970-talen.
Byggstenarna
Bokstavliga tecken
Det enklaste regex är bara bokstavlig text. Mönstret hej matchar strängen "hej". Inget fancigt.
Punkt (.) — Vilket enstaka tecken som helst
En punkt matchar vilket enstaka tecken som helst (utom en ny rad).
h.tmatchar "hat," "hit," "hot," "hut," och till och med "h3t"
Teckenklasser ([]) — Specifika tecken
Hakparenteser definierar en uppsättning tillåtna tecken på den positionen.
[aeiou]matchar vilken enstaka vokal som helst[0-9]matchar vilket siffertecken som helst[A-Za-z]matchar vilken bokstav som helst (stor eller liten)[^0-9]matchar vilket tecken som INTE är en siffra (^inuti parenteser betyder "inte")
Kvantifierare — Hur många
Dessa symboler styr upprepning:
| Symbol | Betydelse | Exempel | Matchar |
|---|---|---|---|
* |
Noll eller fler | ab*c |
"ac," "abc," "abbc," "abbbc" |
+ |
En eller fler | ab+c |
"abc," "abbc," "abbbc" (inte "ac") |
? |
Noll eller en | colou?r |
"color" och "colour" |
{3} |
Exakt 3 | a{3} |
"aaa" |
{2,4} |
Mellan 2 och 4 | a{2,4} |
"aa," "aaa," "aaaa" |
Ankare — Position
^i början betyder "start på strängen"$i slutet betyder "slut på strängen"^hej$matchar bara den exakta strängen "hej," inte "säg hej" eller "hej världen"
Förkortade klasser
Vanliga teckenklasser har genvägar:
| Förkortning | Motsvarighet | Betydelse |
|---|---|---|
\d |
[0-9] |
Vilket siffertecken som helst |
\w |
[A-Za-z0-9_] |
Vilket "ord"-tecken som helst |
\s |
[ \t\n\r] |
Vilket blanktecken som helst |
\D |
[^0-9] |
Vilket icke-siffertecken som helst |
\W |
[^A-Za-z0-9_] |
Vilket icke-ordtecken som helst |
\S |
[^ \t\n\r] |
Vilket icke-blanktecken som helst |
Grupper (()) — Gruppering och infångning
Parenteser grupperar delar av ett mönster. Det är användbart för att tillämpa kvantifierare på en grupp eller för att extrahera specifika delar av en matchning.
(ab)+matchar "ab," "abab," "ababab"(\d{3})-(\d{4})matchar "555-1234" och fångar "555" och "1234" separat
Lodstreck (|) — Eller
Lodstrecket betyder "eller."
cat|dogmatchar "cat" eller "dog"(jpg|png|gif)matchar vilken av dessa tre bildtillägg som helst
Praktiska mönster du kan använda idag
Matcha en e-postadress (enkelt)
[\w.-]+@[\w-]+\.[\w.]+
Uppdelning:
[\w.-]+— ett eller fler ordtecken, punkter eller bindestreck (den lokala delen)@— bokstavligt @-tecken[\w-]+— ett eller fler ordtecken eller bindestreck (domänen)\.— bokstavlig punkt (escapad eftersom.är ett specialtecken)[\w.]+— ett eller fler ordtecken eller punkter (toppdomänen)
Observera E-postvalidering med regex är notoriskt svårt att göra perfekt. Det enkla mönstret ovan täcker 99 % av verkliga e-postadresser men hanterar inte varje kantfall som definieras i RFC-specifikationen. För produktionsvalidering, använd ditt programmeringsspråks e-postvalideringsbibliotek.
Matcha ett telefonnummer (amerikanskt format)
\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}
Detta matchar:
- (555) 123-4567
- 555-123-4567
- 555.123.4567
- 555 123 4567
Matcha en URL
https?://[\w.-]+(/[\w./-]*)?
Detta matchar:
Matcha ett datum (ÅÅÅÅ-MM-DD)
\d{4}-\d{2}-\d{2}
Detta matchar: 2026-03-23, 1999-12-31 osv.
Hitta duplicerade ord
\b(\w+)\s+\1\b
Detta matchar upprepade ord som "och och" eller "är är." \1 refererar tillbaka till vad som fångades av den första gruppen.
Matcha en IPv4-adress
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
Detta matchar mönster som 192.168.1.1 eller 10.0.0.255.
Tips för att skriva regex
1. Börja enkelt, förfina sedan
Försök inte skriva det perfekta regex-mönstret på första försöket. Börja med ett brett mönster, testa det mot din data och skärp det.
2. Testa alltid
Regex är lätt att skriva fel. En saknad kvantifierare eller en ej escapad punkt kan helt ändra vad som matchar. Testa alltid ditt mönster mot verkliga data innan du använder det i produktion.
3. Escapa specialtecken
Om du behöver matcha en bokstavlig punkt, parentes, hakparentes eller annat specialtecken, escapa det med ett snedstreck: \., \(, \[.
4. Använd kommentarer och namngivna grupper
I komplexa mönster, använd namngivna grupper och kommentarer (där det stöds) för att göra regex-mönstret läsbart. Ditt framtida jag kommer att tacka dig.
5. Vet när du inte ska använda regex
Regex är fel verktyg för att tolka HTML, XML, JSON eller någon nästlad struktur. Använd en riktig tolk för det.
Tips Testa och felsök dina regex-mönster i realtid: Så testar du regex-mönster. Klistra in ditt mönster och testdata, och se matchningar markerade direkt.
Börja testa regex nu:
Gratis, direkt feedback och ingen registrering krävs.