Reguláris kifejezések embereknek: Gyakorlati útmutató
A reguláris kifejezéseknek (regex) imázsproblémájuk van. Úgy néznek ki, mintha valaki elaludt volna a billentyűzeten: ^[\w.-]+@[\w-]+\.[\w.]+$. Kódfelülvizsgálatokon, szövegszerkesztőkben, keresőeszközökben és az űrlapok ellenőrzésénél jelennek meg. A fejlesztők vagy szeretik, vagy teljesen kerülik őket.
Az igazság valahol a kettő között van. A regex valóban hatékony. Valóban zavaros is eleinte. De nem kell minden homályos funkcióját elsajátítanod ahhoz, hogy gyakorlati értéket kapj belőle. Néhány minta lefedi a valós felhasználási esetek túlnyomó többségét.
Mit csinál valójában a regex?
A reguláris kifejezés egy minta, amely karakterláncok egy halmazát írja le. Megadod egy keresőeszköznek, és az megtalálja az összes olyan karakterláncot, amely illeszkedik a mintához. Gondolj rá úgy, mint egy nagyon precíz keresési lekérdezésre.
Normális keresés: keress pontosan ezt: „hello" Regex keresés: keress mindent, ami e-mail-cím, telefonszám, dátum, URL vagy bármilyen más általad leírt minta formájában néz ki.
Tudtad? A reguláris kifejezéseket Stephen Kleene matematikus találta fel 1956-ban a „reguláris nyelvek" leírásának jelöléseként a formális nyelvészeti elméletben. Az 1960-as és 1970-es évek korai Unix szövegszerkesztőin keresztül kerültek a számítástechnikába.
Az építőkövek
Szó szerinti karakterek
A legegyszerűbb regex csak szó szerinti szöveg. A hello minta illeszkedik a „hello" karakterláncra. Semmi különös.
A pont (.) — Bármely egyedi karakter
A pont bármely egyedi karakterre illeszkedik (az újsoron kívül).
- A
h.tilleszkedik a „hat", „hit", „hot", „hut" és még a „h3t" karakterláncokra is
Karakterosztályok ([]) — Meghatározott karakterek
A szögletes zárójelek az adott pozícióban megengedett karakterek halmazát határozzák meg.
[aeiou]bármely egyedi magánhangzóra illeszkedik[0-9]bármely számjegyre illeszkedik[A-Za-z]bármely betűre illeszkedik (kis- és nagybetű)[^0-9]bármely NEM számjegy karakterre illeszkedik (a^a zárójelben belül „nem" jelentésű)
Kvantorok — Hány darab
Ezek a szimbólumok az ismétlést vezérlik:
| Szimbólum | Jelentés | Példa | Illeszkedik |
|---|---|---|---|
* |
Nulla vagy több | ab*c |
„ac", „abc", „abbc", „abbbc" |
+ |
Egy vagy több | ab+c |
„abc", „abbc", „abbbc" (de nem „ac") |
? |
Nulla vagy egy | colou?r |
„color" és „colour" |
{3} |
Pontosan 3 | a{3} |
„aaa" |
{2,4} |
2 és 4 között | a{2,4} |
„aa", „aaa", „aaaa" |
Horgonyok — Pozíció
^az elején azt jelenti: „karakterlánc eleje"$a végén azt jelenti: „karakterlánc vége"^hello$csak a pontosan „hello" karakterláncra illeszkedik, nem a „say hello" vagy „hello world" esetekre
Rövidített osztályok
A gyakori karakterosztályoknak vannak rövidítéseik:
| Rövidítés | Egyenértékű | Jelentés |
|---|---|---|
\d |
[0-9] |
Bármely számjegy |
\w |
[A-Za-z0-9_] |
Bármely „szó" karakter |
\s |
[ \t\n\r] |
Bármely szóköz |
\D |
[^0-9] |
Bármely nem számjegy |
\W |
[^A-Za-z0-9_] |
Bármely nem szó-karakter |
\S |
[^ \t\n\r] |
Bármely nem szóköz |
Csoportok (()) — Csoportosítás és rögzítés
A zárójelek csoportosítják a minta részeit. Ez hasznos kvantorok egy csoportra való alkalmazásához, vagy a találatok egyes részeinek kinyeréséhez.
(ab)+illeszkedik az „ab", „abab", „ababab" karakterláncokra(\d{3})-(\d{4})illeszkedik az „555-1234" karakterláncra, és külön rögzíti az „555" és „1234" részeket
A cső (|) — Vagy
A cső jel az „vagy" szót jelenti.
cat|dogilleszkedik a „cat" vagy a „dog" karakterláncra(jpg|png|gif)illeszkedik ezek bármelyik képkiterjesztésre
Ma is használható praktikus minták
E-mail-cím illesztése (egyszerű)
[\w.-]+@[\w-]+\.[\w.]+
Részletezve:
[\w.-]+— egy vagy több szó-karakter, pont vagy kötőjel (a helyi rész)@— szó szerinti @ jel[\w-]+— egy vagy több szó-karakter vagy kötőjel (a domain)\.— szó szerinti pont (escape-elve, mert a.különleges karakter)[\w.]+— egy vagy több szó-karakter vagy pont (a TLD)
Figyelmeztetés Az e-mail-érvényesítés regexszel hírhedten nehéz tökéletesen csinálni. A fenti egyszerű minta a valós e-mail-címek 99%-ára vonatkozik, de nem kezeli az RFC-specifikációban meghatározott összes éles szélső esetet. Éles alkalmazásban az e-mail érvényesítésre használd a programozási nyelved e-mail-érvényesítő könyvtárát.
Telefonszám illesztése (US formátum)
\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}
Ez illeszkedik:
- (555) 123-4567
- 555-123-4567
- 555.123.4567
- 555 123 4567
URL illesztése
https?://[\w.-]+(/[\w./-]*)?
Ez illeszkedik:
Dátum illesztése (ÉÉÉÉ-HH-NN)
\d{4}-\d{2}-\d{2}
Illeszkedik: 2026-03-23, 1999-12-31 stb.
Ismételt szavak keresése
\b(\w+)\s+\1\b
Ez illeszkedik az ismételt szavakra, mint „the the" vagy „is is". A \1 visszautal arra, amit az első csoport rögzített.
IPv4-cím illesztése
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
Ez illeszkedik az olyan mintákra, mint 192.168.1.1 vagy 10.0.0.255.
Tippek a regex írásához
1. Kezdj egyszerűen, majd finomítsd
Ne próbáld az első próbálkozásra tökéletes regexet írni. Kezdj egy általános mintával, teszteld az adataidon, majd szűkítsd.
2. Mindig tesztelj
A regex könnyen elrontható. Egy hiányzó kvantor vagy egy escape-elés nélküli pont teljesen megváltoztathatja, mire illeszkedik. Mindig teszteld a mintát valós adatokkal, mielőtt élesben alkalmazod.
3. Escape-eld a speciális karaktereket
Ha szó szerinti pontot, zárójelet, szögletes zárójelet vagy más speciális karaktert kell illesztened, escape-eld backslash-sel: \., \(, \[.
4. Használj megjegyzéseket és nevesített csoportokat
Összetett mintáknál használj nevesített csoportokat és megjegyzéseket (ahol támogatott), hogy a regex olvasható maradjon. A jövőbeli éned hálás lesz.
5. Tudd, mikor ne használj regexet
A regex rossz eszköz HTML, XML, JSON vagy bármilyen beágyazott struktúra értelmezésére. Ezekhez használj megfelelő elemzőt.
Tipp Teszteld és hibakeresd a regex mintáidat valós időben: Hogyan tesztelj Regex mintákat. Illeszd be a mintát és a tesztadatokat, és azonnal látod kiemelt a találatokat.
Kezdj el most regexet tesztelni:
Ingyenes, azonnali visszajelzés, regisztráció nélkül.