A reguláris kifejezéseknek megvan az a hírük, hogy véletlenszerű zajnak tűnnek. Egy olyan minta, mint a ^[\w.-]+@[\w-]+\.\w{2,}$, úgy nézhet ki, mintha egy macska sétált volna végig a billentyűzeten. De a rejtélyes szintaxis mögött egy figyelemreméltóan elegáns ötlet rejlik: egy tömör nyelv szövegminták leírására.
Akár űrlap-bemeneteket validálsz, naplófájlokban keresel, adatokat tisztítasz, akár keresés-és-csere műveletet végzel egy kódbázisban, a regex a fejlesztő eszköztárának egyik legsokoldalúbb eszköze. És nem kell minden homályos funkciót memorizálnod ahhoz, hogy valódi értéket kapj belőle. Néhány építőkő lefedi a gyakorlati felhasználási esetek túlnyomó többségét.
Mit csinál valójában a regex
A reguláris kifejezés (regex vagy regexp) egy minta, amely karakterláncok halmazát írja le. Megadod egy keresőmotornak — a programozási nyelvedben, szövegszerkesztődben vagy parancssori eszközödben — és az megtalálja az összes illeszkedő karakterláncot.
Gondolj rá úgy, mint egy fejlettebb keresési lekérdezésre:
- Normál keresés: keresd meg a pontos „error" szót
- Regex keresés: keress meg bármit, ami IP-címnek, dátumnak, e-mail címnek tűnik, vagy bármilyen leírható struktúra
A regex-et Stephen Kleene matematikus találta fel 1956-ban, és a Unix szövegszerkesztőkön keresztül került be a számítástechnikába az 1960-as években. Ma gyakorlatilag minden programozási nyelv és szövegszerkesztő támogatja.
Az építőkövek
Szó szerinti karakterek
A legegyszerűbb regex egyszerű szöveg. A hello minta megfelel a „hello" karakterláncnak, bárhol is fordul elő. Semmi különleges.
A pont (.) — bármely karakter
A pont bármely egyetlen karakternek megfelel, kivéve az új sort.
h.tilleszkedik a „hat", „hit", „hot", „h3t", sőt a „h t" karakterláncra is
Karakterosztályok ([])
A szögletes zárójelek egy pozícióban engedélyezett karakterek halmazát határozzák meg.
[aeiou]— bármely magánhangzó[0-9]— bármely számjegy[A-Za-z]— bármely betű[^0-9]— bármely karakter, ami NEM számjegy (a^a zárójeleken belül „nem"-et jelent)
Rövidítéses osztályok
| Rövidítés | Jelentés | Egyenértékű |
|---|---|---|
\d |
Bármely számjegy | [0-9] |
\w |
Szókarakter | [A-Za-z0-9_] |
\s |
Szóköz | [ \t\n\r] |
\D |
Nem számjegy | [^0-9] |
\W |
Nem szókarakter | [^A-Za-z0-9_] |
\S |
Nem szóköz | [^ \t\n\r] |
Kvantorok — hányszor
A kvantorok szabályozzák, hányszor kell megjelennie az előző elemnek.
| Szimbólum | Jelentés | Példa | Illeszkedik |
|---|---|---|---|
* |
Nulla vagy több | ab*c |
„ac", „abc", „abbc" |
+ |
Egy vagy több | ab+c |
„abc", „abbc" (nem „ac") |
? |
Nulla vagy egy | colou?r |
„color" és „colour" |
{3} |
Pontosan 3 | \d{3} |
„123", „456" |
{2,4} |
2 és 4 között | \d{2,4} |
„12", „123", „1234" |
Horgonyok — pozíció
^— karakterlánc eleje (vagy sor, azmjelzővel)$— karakterlánc vége (vagy sor)\b— szóhatár
A ^\d{4}$ minta olyan karakterláncra illeszkedik, amely pontosan négy számjegy, mint „2026", de nem „abc2026" vagy „2026xyz".
Csoportok és alternáció
(abc)— az „abc"-t csoportként rögzítia|b— „a"-ra vagy „b"-re illeszkedik(cat|dog)— „cat"-ra vagy „dog"-ra illeszkedik
A csoportok lehetővé teszik a kvantorok alkalmazását sorozatokra is: (ha)+ illeszkedik a „ha", „haha", „hahaha" karakterláncokra.
Gyakori gyakorlati minták
E-mail validálás (alap)
^[\w.-]+@[\w-]+\.\w{2,}$
Ez illeszkedik a user@example.com-ra, a first.last@company.co.uk-ra (részben), és elutasítja az @ vagy domain nélküli karakterláncokat.
Fontos: Az e-mail címek tökéletes validálása regex-szel közismerten nehéz — a teljes RFC 5322 specifikáció rendkívül összetett. Éles rendszerekhez használj alap regex-et a formátum-ellenőrzéshez, majd igazold a címet visszaigazoló e-mail küldésével.
Telefonszám illesztése
\+?\d{1,3}[-.\s]?\(?\d{1,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{3,4}
Ez kezeli a formátumokat, mint +1 555 123 4567, 555-123-4567 és (555) 123-4567.
URL illesztése
https?://[\w.-]+(/[\w./?&=-]*)?
Illeszkedik a https://example.com-ra, a http://example.com/path?q=hello-ra.
Dátum illesztése (ÉÉÉÉ-HH-NN)
\d{4}-\d{2}-\d{2}
Illeszkedik a 2026-03-29-re, az 1999-12-31-re. Megjegyzés: ez csak a formátumot ellenőrzi, az érvényességet nem — a 9999-99-99-re is illeszkedik.
A viselkedést módosító jelzők
A legtöbb regex motor támogatja a minta alkalmazásának módját módosító jelzőket:
| Jelző | Név | Hatás |
|---|---|---|
g |
Globális | Minden egyezés megtalálása, nem csak az első |
i |
Kis-/nagybetű érzéketlen | A hello illeszkedik a „Hello"-ra, „HELLO"-ra stb. |
m |
Többsoros | ^ és $ minden sor elejére/végére illeszkedik |
s |
Dotall | . az újsor karakterekre is illeszkedik |
JavaScriptben a jelzők a záró perjel után kerülnek: /hello/gi. Pythonban argumentumként adjuk meg: re.findall(r"hello", text, re.IGNORECASE).
Mikor felesleges a regex
A regex erőteljes, de nem mindig a megfelelő eszköz:
- HTML vagy XML elemzése. Használj megfelelő DOM parsert. A regex nem tudja megbízhatóan kezelni az egymásba ágyazott címkéket.
- JSON elemzése. Használd a
JSON.parse()-t vagy megfelelőjét. A regex szélsőséges esetekben hibázik. - Összetett validáció. Ha a mintád több sort ölel fel és öt percig tart elolvasni, fontold meg a procedurális validációs kód írását.
- Egyszerű szövegműveletek. Ha csak
startsWith()-ra,includes()-ra vagysplit()-re van szükséged, az egyszerű szövegmetódusok tisztábbak és gyorsabbak.
Gyakori buktatók
- Elfelejtett speciális karakterek escape-elése. A pont
.bármely karakterre illeszkedik. Szó szerinti pontra a\.használatos. Ugyanígy a(,),[,],+,*,?,{,},^,$,|és\esetében. - Mohó vs. lusta illeszkedés. Alapértelmezetten a
.*mohó — a lehető legtöbbet illeszti. Add hozzá a?-t a lusta módhoz:.*?a lehető legkevesebbet illeszti. Ez fontos, ha elválasztójelek közötti tartalmat nyersz ki. - Katasztrofális visszalépés. Az egymásba ágyazott kvantorok, mint az
(a+)+, exponenciális számú útvonalat próbálhatnak ki bizonyos bemeneteknél, lefagyasztva a programodat. Kerüld az egymásba ágyazott ismétlést átfedő mintáknál. - Elfelejtett horgonyok.
^és$nélkül a mintád részkarakterláncokra illeszkedik. A\d{3}illeszkedik a „123"-ra az „abc12345" belsejében. Használj^\d{3}$-t, ha pontos egyezésre van szükséged.
Tovább
A regex tanulásának legjobb módja a kísérletezés. Írj be egy mintát, illeszd be a tesztszöveget, és nézd meg, mi világít ki. Módosíts és iterálj, amíg meg nem érted, hogyan működik minden egyes elem.
- Hogyan tesztelj Regex mintákat — interaktív útmutató példákkal
- Regex tesztelő — illeszd be a mintádat és a tesztadatokat, nézd az egyezéseket valós időben kiemelve
