A reguláris kifejezés valójában egy speciális karakterekbÅ‘l álló formális nyelv1, amely egy olyan automatát definiál, aminek a segÃtségével egy szövegben a kifejezés által definiált mintára illeszkedést vizsgálhatjuk, cserélhetjük a szöveg bizonyos részeit, vagy a minta mentén darabolhatjuk is azt.
Minden modern programozási nyelv valamilyen szinten rendelkezik reguláris kifejezés támogatással. C# esetén direkt nyelvi elem (még) nem létezik a reguláris kifejezések megadására. Az implementáció egy .NET keretrendszeri osztály által biztosÃtott.
Mielőtt elmerülnénk a tényleges használatban, érdemes áttekinteni, hogy milyen karakterek is használhatók minta megadásra.
Karakterek és speciális karakterek
A reguláris kifejezések leÃrásában nem szereplÅ‘ karakterek ugyanolyan jelentéssel bÃrnak, mint a normál szövegek esetén. Ha a szövegünkben olyan mintát szeretnénk alkalmazni, ami speciális jelentéssel bÃr, akkor a \ karakter segÃtségével kivonhatjuk a mintaillesztés alól.
A . karakter a kifejezésben bármilyen karaktert jelölhet. Ha egysoros üzemmódban van futtatva a kifejezés, akkor illesztéskor a sor vége karaktert is tartalmazza.
A \w az alfanumerikus karaktereket jelöli, vagyis az angol ABC kis és nagybetűit, a számokat és a _ jelet.
A \W karakter a \w ellenkezője: minden nem alfanumerikus karaktert jelöl.
A \d decimális karaktereket (0-9) jelöl. Ennek ellenkezője a \D, ami minden nem decimális karaktert jelöl.
A \s a space, tab, kocsi vissza és sor emelés karaktereket jelöli. A nagybetűs \S változat itt is az ellenkezőjét jelöli.
A \n, valamint a \t és a \r jelölők külön a sor emelés, tab és kocsi vissza karakterekre vonatkoznak.
Lehetséges karakterek listája
Szögletes zárójelek között lehetséges karakterek sorozatát adhatjuk meg. Például a [abc] kifejezés illeszkedést fog mutatni a, b és c betűkre is. Tagadni az előző kifejezést a ^ karakterrel lehetséges: A [^abc] kifejezés minden betűre egyezést fog mutatni, ha az a betű nem a, b vagy c.
A lehetséges karakterek megadhatóak kötőjellel is. A [a-zA-Z] kifejezés egyezést fog mutatni abban az esetben, ha a vizsgált karakter az angol ABC kicsi vagy nagy betűje.
Kikötések
A ^ karakter szögletes zárójelen kÃvül azt jelenti, hogy a ^ karaktert követÅ‘ mintának a sor elején kell egyezést mutatnia. Például a ^Z abban az esetben mutat egyezést, ha a sor Z betűvel kezdÅ‘dik.
Sor végi egyezést a $ karakterrel lehet vizsgálni. Itt a mintának meg kell előznie a $ karaktert. Tehát, ha olyan sorokat szeretnék vizsgálni, amelyeknek a Z betűvel kell végződniük, akkor a Z$ kifejezés alkalmazható.
Előfordulások száma
A mintán belüli részminták elÅ‘fordulási számára is kitételeket tehetünk. A ? karakter a megelÅ‘zÅ‘ mintát 0 vagy 1 alkalommal próbálja illeszteni. A * karakter 0 vagy több elÅ‘fordulást jelent az Å‘t megelÅ‘zÅ‘ mintára, mÃg a + jel 1 vagy több elÅ‘fordulást.
A *? és a +? a sima * és + jelölÅ‘khöz hasonlÃt azzal a különbséggel, hogy a kérdÅ‘jellel kiegészÃtett változatok a lehetÅ‘ legkevesebb alkalommal való illeszkedést Ãrják elÅ‘.
Amennyiben egy rész mintát pontosan n alkalommal szeretnénk illeszteni, akkor kapcsos zárójelek között megadva az őt megelőző részmintát n alkalommal próbálja illeszteni. {n}
Az előfordulások számának minimum és maximum értéke is megadható. A {n,m} kifejezés azt vonja magával, hogy legalább n alkalommal illeszkedjen, de m alkalomnál kevesebbszer.
Ha a felső korlátot nem adjuk meg, akkor a mintaillesztés annyi alkalommal történik meg, amennyiszer csak lehet. Például: {n,}
CsoportosÃtás
A minták a zárójelek segÃtségével csoportokba foglalhatóak. A zárójelben a | karakterrel VAGY műveletet valósÃthatunk meg. Például: A (alma|körte) kifejezés az alma vagy a körte szavakra fog egyezést mutatni.
Eszköz támogatás
Reguláris kifejezést saját magunktól Ãrni és tesztelni igen fájdalmas tud lenni. Éppen ezért számos eszköz létezik a reguláris kifejezések tesztelésére és hibakeresésére.
A reguláris kifejezések programozási nyelvtÅ‘l függetlenek, Ãgy a https://regexr.com/ oldalon található Javascript alkalmazás is ugyanúgy használható .NET esetén, mint egy saját magunk által Ãrt. Az alkalmazás külön elÅ‘nye, hogy a beÃrt kifejezésrÅ‘l elmagyarázza, hogy pontosan mit is csinál.
-
A formális nyelv a matematika, a logika és az informatika számára egy véges ábécébÅ‘l generálható, véges hosszúságú szavak (például karakter stringek, jelsorozatok) halmaza – https://hu.wikipedia.org/wiki/Form%C3%A1lis_nyelv↩