Regex Tester: minták építése és debuggolása saját szövegeden
A reguláris kifejezés egy apró nyelv a szövegek alakjának leírására. Ahelyett, hogy azt kérdeznéd, "itt van ez a pontos szó?", egy regex azt kérdezteti veled, "van itt egy ilyen alakú karakterlánc?" Ez teszi hatékonnyá szövegek keresésében, validálásában, kinyerésében és cseréjében kódszerkesztőkben, naplófájlokban, űrlapbeviteleknél és szkriptekben. Ugyanez teszi könnyűvé az elrontását is, mert egy minta, amely a fejedben jól hangzik, csendben túl sokat, túl keveset, vagy semmit sem talál.
Ezért éri meg interaktívan tesztelni a találgatás helyett. Amikor beírsz egy mintát, és figyeled, ahogy a találatok kiemelődnek a valódi mintaszövegben, azonnali visszajelzést kapsz: látod, mit fogott meg, mi csúszott át rajta, és melyik befogó csoport melyik darabot ragadta meg. A Regex Tesztelőnk teljes egészében a böngésződben fut. A mintád és a mintaszöveged soha nem hagyja el az oldalt, így nyugodtan beillesztheted a naplósorokat, e-maileket vagy éles adatokat anélkül, hogy bármit is elküldenél egy szervernek.

Az építőelemek, amelyeket érdemes ismerni
A legtöbb mindennapi minta egy kis készletnyi elemből épül fel. Ismerd meg ezeket, és a vadonban talált regexek többségét elolvashatod.
A karakterosztályok egy engedélyezett karakterhalmazt írnak le. A [aeiou] bármely magánhangzót jelöli, a [0-9] egy számjegyet, a [a-zA-Z] pedig egy betűt. Egy szögletes zárójelen belüli kalapjel negálja a halmazt, tehát a [^0-9] azt jelenti, "bármely karakter, ami nem számjegy". A rövidítések gépelést spórolnak: a \d egy számjegy, a \w egy szókarakter (betűk, számjegyek, aláhúzás), a \s egy szóköz típusú karakter, a pont . pedig szinte bármilyen egyetlen karaktert jelöl.
A kvantorok megmondják, hányszor ismétlődhet az előző elem. A * nulla vagy több alkalmat jelent, a + egy vagy több alkalmat, a ? pedig nulla vagy egy alkalmat (opcionális). Pontos számokhoz a {3} pontosan hármat jelent, a {2,4} pedig kettőtől négyig. Így a \d{4} egy négyjegyű évszámot talál meg, a colou?r pedig mindkét írásmódra illeszkedik.
A horgonyok egy pozícióhoz rögzítik a mintát, nem egy karakterhez. A ^ a szöveg elejét jelöli, a $ a végét, a \b pedig egy szóhatárt. A ^Error minta csak azokra a sorokra illeszkedik, amelyek "Error"-ral kezdődnek, ami pontosan az, amire naplók átfésülésekor szükséged van.
A csoportok zárójelbe foglalnak egy mintarészt, egyrészt hogy egy kvantort több karakterre egyszerre alkalmazzanak, másrészt hogy a talált szöveget későbbi felhasználásra befogják. A (\d{4})-(\d{2})-(\d{2}) mintában minden csoport egy dátumkomponenst fog be, amelyet később kinyerhetsz. Az alternáció a "vagy" jellel úgy működik, mint egy "vagy": a cat|dog|fish a három szó bármelyikére illeszkedik.
Minták, amelyekhez valóban gyakran nyúlsz
Néhány visszatérő feladat lefedi a valódi munka nagy részét. Egy e-mailszerű karakterlánc elkapásához a [\w.+-]+@[\w-]+\.[\w.-]+ pragmatikus kiindulópont; a teljes, formális specifikáció szerinti e-mail validálás híresen bonyolult, és egy lazább minta rendszerint jobb választás, ha jelöltek kiemeléséről van szó, nem felhasználók elutasításáról.
Számokhoz a \d+ számjegyfutamokat ragad meg, míg a -?\d+(\.\d+)? az opcionális negatív előjeleket és tizedesjegyeket is kezeli. A vezető és záró szóközök levágásához illeszd a ^\s+|\s+$ mintát, és cseréld ki üresre. Az ismétlődő szavak megtalálásához a visszahivatkozásos \b(\w+)\s+\1\b minta egy szót és az utána következő ismétlését találja meg, ahol a \1 az első befogott csoportra hivatkozik vissza.

A flag-ek megváltoztatják az illesztés viselkedését
A flag-ek az egész mintát módosító kapcsolók. A global flag (g) minden találatot megkeres, nem áll meg az elsőnél, ami akkor kell, ha minden előfordulást ki szeretnél emelni. A case-insensitive flag (i) miatt az error illeszkedik az "Error"-ra és az "ERROR"-ra is. A multiline flag (m) megváltoztatja a ^ és $ működését, hogy minden sor elejénél és végénél illeszkedjenek, ne csak a teljes szövegnél, ami elengedhetetlen a soronkénti naplófeldolgozáshoz. Más hasznos flag-ek közé tartozik az s (dotall, amitől a pont az újsorokra is illeszkedik) és a u a teljes Unicode-kezeléshez.
A dialektusok nyelvenként kissé eltérnek
A regex egy nyelvcsalád, nem egyetlen rögzített szabvány. A JavaScript, a Python, a PCRE (PHP), a Java, a .NET, a Go és a Rust megegyezik a fenti alapszintaxisban, de a szélein eltérnek: a lookbehind-támogatás, a névvel ellátott csoportok szintaxisa ((?<name>...) versus (?P<name>...)), az Unicode tulajdonság-escape-ek, és hogy mely flag-ek léteznek, mind változó. Egy minta, amely az egyik motorban működik, egy másikban apró módosításra szorulhat, ezért érdemes azzal a dialektussal tesztelni, amivel ténylegesen dolgozol. Amikor egy mintát már beállítottál, a többi fejlesztői eszközünk és szöveges eszközünk segíthet az imént megtalált adat tisztítása, kódolása és átalakítása körüli munkában.
Gyakran ismételt kérdések
Elküldi a szövegemet egy szervernek?
Nem. A Regex Tesztelő teljes egészében a böngésződben fut. A mintád és a mintaszöveged az eszközödön marad, és soha nem kerül feltöltésre, így biztonságosan beilleszthetsz érzékeny adatokat is.
Melyik regex dialektust használja ez az eszköz?
A böngésződbe épített JavaScript regex motort használja. Az alapszintaxis megegyezik azzal, amit a legtöbb nyelvből ismerhetsz, bár néhány haladó funkció kissé eltér a PCRE-től, a Pythontól vagy a .NET-től.
Mi a különbség a mohó és a lusta illesztés között?
Alapértelmezés szerint a kvantorok mohók, és a lehető legtöbb szöveget ragadják meg. Egy kérdőjel hozzáadása lustává teszi őket, így a lehető legkevesebbet fogják be. Például a pont-csillag minta mohó, míg a pont-csillag-kérdőjel minta lusta.
Hogyan illesztek egy szó szerinti speciális karaktert?
Escapeld backslash-sel. Egy tényleges pont illesztéséhez írj backslash-pontot. Ugyanez vonatkozik más metakarakterekre is, mint a zárójelek, a szögletes zárójelek, a pluszjel és a kérdőjel.
Miért nem talál semmit a mintám?
A leggyakoribb okok egy hiányzó global flag, a rossz pozícióhoz rögzítő horgonyok, egy nem escapelt speciális karakter, vagy egy mohó kvantor, amely túlfut a várt határon. Teszteld darabonként, hogy megtaláld a bűnöst.
Befoghatok részeket a találatból?
Igen. Foglald zárójelbe a minta egy szakaszát, hogy befogó csoportot hozz létre. Minden csoportot külön jelent az eszköz, amivel olyan mezőket nyerhetsz ki, mint az év, a hónap és a nap egy dátumból.
