"the" => The fat cat sat on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/dmRygT/1) Az `123` reguláris kifejezés illeszkedik a `123` karakterláncra. A reguláris kifejezés minden egyes karaktere össze lesz hasonlítva a bevitt karakterlánc minden elemével egymás után. A reguláris kifejezések alap esetben kis-nagybetű érzékenyek, tehát a `The` reguláris kifejezés nem fog illeszkedni a `the` karakterláncra.
"The" => The fat cat sat on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/1paXsy/1) ## 2. Meta karakterek A meta karakterek a reguláris kifejezések építőkockái. A meta karakterek speciális módon értelmezendőek. Némelyik meta karakternek speciális jelentése van és szögletes zárójelek közé vannak téve. A meta karakterek a következők: |Meta karakter|Leírás| |:----:|----| |.|A pont illeszkedik minden egyes karakterre kivéve a sortörést.| |[ ]|Karakter osztály. Minden karakterre illeszkedik ami a szögletes zárójelek közt van.| |[^ ]|Negált karakter osztály. Minden karakterre illeszkedik ami nincs a szögletes zárójelek közt.| |*|Illeszkedik az őt megelőző szimbólum 0 vagy több ismétlődésére.| |+|Illeszkedik az őt megelőző szimbólum 1 vagy több ismétlődésére.| |?|Opcionálissá teszi az őt megelőző szimbólumot.| |{n,m}|Kapcsos zárójelek. Illeszkedik az őt megelőző szimbólum minimum "n" de nem több mint "m" ismétlődésére.| |(xyz)|Karakter csoport. Illeszkedik az xyz karakterekre pontosan ilyen sorrendben.| |||Alternáció. Illeszkedik a szimbólum előtt és után álló karakterekre is.| |\|Escape-li a következő karaktert. A segítségével lefoglalt karakterekre is lehet illeszkedni
[ ] ( ) { } . * + ? ^ $ \ |
|
|^|A karakterlánc elejére illeszkedik.|
|$|A karakterlánc végére illeszkedik.|
## 2.1 Full stop
A full stop `.` a legegyszerűbb meta karakter példa. A `.` meta karakter illeszkedik
minden egyes karakterre. Nem fog illeszkedni a kocsi vissza és a sortörés karakterekre.
Például a `.ar` reguláris kifejezés jelentése: minden karakter, amit `a` aztán `r` követ.
".ar" => The car parked in the garage.[Teszteld a reguláris kifejezést](https://regex101.com/r/xc9GkU/1) ## 2.2 Karakter osztályok A szögletes zárójelekkel határozzuk meg a karakter osztályokat. A szögletes zárójelek közt kötőjel karakterrel határozhatunk meg karakter tartományokat. A karaktertartomány sorrendje nem számít. Például a `[Tt]he` reguláris kifejezés jelentése: nagybetűs `T` vagy kisbetűs `t` amit egy `h` majd egy `e` betű követ.
"[Tt]he" => The car parked in the garage.[Teszteld a reguláris kifejezést](https://regex101.com/r/2ITLQ4/1) Egy pont a karakter osztályon belül egyébként szó szerint pont-ot jelent. A `ar[.]` reguláris kifejezés jelentése: kisbetűs `a` amit egy `r` aztán egy pont `.` karakter követ.
"ar[.]" => A garage is a good place to park a car.[Teszteld a reguláris kifejezést](https://regex101.com/r/wL3xtE/1) ### 2.2.1 Negált karakter osztályok Általában a kalap szimbólum egy karakterlánc elejét jelenti, de ha egy nyitó szögletes zárójel után áll, akkor negálja a karakter osztályt. Például a `[^c]ar` reguláris kifejezés jelentése: minden karakter a `c` kivételével ami után `a` aztán egy `r` betű áll.
"[^c]ar" => The car parked in the garage.[Teszteld a reguláris kifejezést](https://regex101.com/r/nNNlq3/1) ## 2.3 Ismétlések A következő meta karaktereket `+`, `*` vagy `?` arra használjuk, hogy meghatározzuk, hányszor fordulhat elő az al-minta. Ezek a meta karakterek máshogy viselkednek adott helyzetekben. ### 2.3.1 A csillag A `*` szimbólum az őt megelőző karakter nulla vagy több ismétlődésére illeszkedik. A `a*` reguláris kifejezés jelentése: nulla vagy több ismétlődése az őt megelőző `a` karakternek. De ha egy karakter osztály után áll akkor az egész karakterosztály ismétlődését keresi. Például, a `[a-z]*` reguláris kifejezés jelentése: bármennyi kisbetűs betű egy sorban.
"[a-z]*" => The car parked in the garage #21.[Teszteld a reguláris kifejezést](https://regex101.com/r/7m8me5/1) A `*` szimbólum használható a `.` meta karakterrel `.*`, ez illeszkedik bármilyen karakterláncra. A `*` szimbólum használható a whitespace karakterrel `\s` együtt, hogy illeszkedjen egy whitespace-ekből álló karakterláncra. Például a `\s*cat\s*`kifejezés jelentése: nulla vagy több szóköz, amit egy kisbetűs `c`, aztán egy kisbetűs `a`, aztán egy kisbetűs `t`, amit még nulla vagy több szóköz követ.
"\s*cat\s*" => The fat cat sat on the concatenation.[Teszteld a reguláris kifejezést](https://regex101.com/r/gGrwuz/1) ### 2.3.2 A plusz A `+` szimbólum illeszkedik az őt megelőző karakter egy vagy több ismétlődésére. Például a `c.+t` kifejezés jelentése: kisbetűs `c` betű, amit legalább egy vagy több `t` követ. Itt tisztázni kell hogy a `t` az utolsó `t` a mondatban.
"c.+t" => The fat cat sat on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/Dzf9Aa/1) ### 2.3.3 A kérdőjel A reguláris kifejezésben a `?` meta karakter opcionálissá teszi az őt megelőző karaktert. Ez a szimbólum az őt megelőző karakter nulla vagy egy példányára illeszkedik. Például a `[T]?he` kifejezés jelentése: opcionális a nagybetűs `T`, amit egy kisbetűs `h`, majd egy kisbetűs `e` követ.
"[T]he" => The car is parked in the garage.[Teszteld a reguláris kifejezést](https://regex101.com/r/cIg9zm/1)
"[T]?he" => The car is parked in the garage.[Teszteld a reguláris kifejezést](https://regex101.com/r/kPpO2x/1) ## 2.4 A kapcsos zárójelek A reguláris kifejezésben a kapcsos zárójeleket annak meghatározására használjuk, hogy egy karakter vagy egy karakter csoport hányszor ismétlődhet. Például a `[0-9]{2,3}` kifejezés jelentése: minimum 2 de nem több mint 3 karakter a `[0-9]` karaktertartományon belül.
"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.[Teszteld a reguláris kifejezést](https://regex101.com/r/juM86s/1) Kihagyhatjuk a második számot. Például a `[0-9]{2,}` kifejezés jelentése: 2 vagy több számra illeszkedik. Ha a vesszőt is kitöröljük `[0-9]{3}`: Pontosan 3 számra illeszkedik.
"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.[Teszteld a reguláris kifejezést](https://regex101.com/r/Gdy4w5/1)
"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.[Teszteld a reguláris kifejezést](https://regex101.com/r/Sivu30/1) ## 2.5 Karakter csoportok A karakter csoport al-minták csoportja amik zárójelek közé `(...)` vannak írva. Ahogy előbb már megbeszéltük, ha egy karakter után ismétlő karaktert rakunk, az ismételni fogja az előtte lévő karaktert. De ha egy ismétlő karaktert egy karakter csoport után rakunk, az ismételni fogja az egész csoportot. Például a `(ab)*` kifejezés illeszkedik nulla vagy több ismétlődésére az `ab` karaktereknek. Használhatunk alternáló meta karaktert `|` is a csoporton belül. Például a `(c|g|p)ar` kifejezés jelentése: kisbetűs `c`, `g` vagy `p` karakter, amit egy `a` aztán egy `r` karakter követ.
"(c|g|p)ar" => The car is parked in the garage.[Teszteld a reguláris kifejezést](https://regex101.com/r/tUxrBG/1) ## 2.6 Alternálás A reguláris kifejezésben a függőleges vonalat `|` alternálásra (választásra) használjuk. Az alternálás olyan, mint egy feltétel több kifejezés közt. Most azt gondolhatod, hogy a karakter osztály és az alternáció ugyan úgy működik. De a fő különbség köztük, hogy a karakter osztály a karakterek szintjén működik, az alternáció viszont a kifejezés szintjén. Például a `(T|t)he|car` kifejezés jelentése: nagybetűs `T` karakter vagy kisbetűs `t` karakter, amit egy `h` és egy `e` követ, VAGY kisbetűs `c` aztán `a` aztán `r` karakter.
"(T|t)he|car" => The car is parked in the garage.[Teszteld a reguláris kifejezést](https://regex101.com/r/fBXyX0/1) ## 2.7 Speciális karakter escape-elése A visszaper `\` a reguláris kifejezésekben a következő karakter escape-elésére való. Ez enged nekünk szimbólumokat vagy lefoglalt karaktereket `{ } [ ] / \ + * . $ ^ | ?` megadni. Egy speciális karakter egyező karakterként való megadásához tedd elé a `\` karaktert. Például a `.` kifejezést az összes karakter, kivéve a sortörés illeszkedéséhez használjuk. A `(f|c|m)at\.?` kifejezés jelentése: kisbetűs `f`, `c` vagy `m`, amit egy kisbetűs `a` aztán egy kisbetűs `t`, amit egy opcionális `.` karakter követ.
"(f|c|m)at\.?" => The fat cat sat on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/fBXyX0/1) ## 2.8 Horgonyok A reguláris kifejezésekben horgonyokat használunk, hogy megnézzük, az illeszkedő szimbólum a kezdő vagy a záró szimbóluma-e a karakterláncnak. A horgonyoknak két fajtájuk van: Az első a Kalap `^`, ami megnézi, hogy az egyező karakter a karakterlánc kezdő kerektere-e és a második a Dollár `$`, ami azt vizsgálja, hogy az egyező karakter a karakterlánc utolsó karaktere-e. ### 2.8.1 Kalap A kalap `^` szimbólumot arra használjuk, hogy megnézzük, hogy az egyező karakter a karakterlánc kezdő kerektere-e. Ha megadjuk a következő kifejezést: `^a`, akkor illeszkedik a `abc` karakterlánc `a` karakterére, mert az za első. De ha megadjuk, hogy: `^b`, ez nem fog illeszkedni az `abc` egyik részére sem, mert nem `b` a kezdő karakter. Nézzünk meg egy másik kifejezést. `^(T|t)he` jelentése: nagybetűs `T` vagy kisbetűs `t` a kezdő karaktere a karakterláncnak, amit kisbetűs `h`, majd kisbetűs `e` követ.
"(T|t)he" => The car is parked in the garage.[Teszteld a reguláris kifejezést](https://regex101.com/r/5ljjgB/1)
"^(T|t)he" => The car is parked in the garage.[Teszteld a reguláris kifejezést](https://regex101.com/r/jXrKne/1) ### 2.8.2 Dollár A dollár `$` szimbólumot arra használjuk, hogy megnézzük, hogy az egyező karakter a karakterlánc utolsó karaktere-e. Például a `(at\.)$` kifejezés jelentése: egy kisbetűs `a`, amit egy kisbetűs `t`, amit egy `.` követ. És ennek az egésznek a karakterlánc végén kell lennie.
"(at\.)" => The fat cat. sat. on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/y4Au4D/1)
"(at\.)$" => The fat cat. sat. on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/t0AkOd/1) ## 3. Shorthand Karakter osztályok A gyakran használt karakter osztályokra a reguláris kifejezésnek vannak rövidítései, amikkel kényelmesebben tudunk használni általános kifejezéseket. A shorthand karakter osztályok a következők: |Rövidítés|Leírás| |:----:|----| |.|Minden karakter a sortörésen kívül.| |\w|Az alfanumerikus karakterekre illeszkedik: `[a-zA-Z0-9_]`| |\W|A nem alfanumerikus karakterekre illeszkedik: `[^\w]`| |\d|Számra illeszkedik: `[0-9]`| |\D|Nem számra illeszkedik: `[^\d]`| |\s|Whitespace karakterre illeszkedik: `[\t\n\f\r\p{Z}]`| |\S|Nem whitespace karakterre illeszkedik: `[^\s]`| ## 4. Lookaround A lookbehind (hátranézés) és a lookahead (előrenézés) speciális típusai a ***nem tárolt csoport*** oknak, amiket illeszkedésre használnak, de nincsenek benne az illeszkedési listában. Az előrenézést akkor használjuk, ha feltételezzük, hogy ezt a mintát egy másik minta előzi meg, vagy követi. Például kell nekünk az összes szám ami előtt `$` karakter áll a következő karakterláncból: `$4.44 and $10.88`. Ezt a mintát fogjuk használni: `(?<=\$)[0-9\.]*`, aminek a jelentése: Szedd ki az összes számot ami `.` karaktert tartalmaz és megelőzi egy `$` karakter. A következő lookaround-okat használhatjuk: |Szimbólum|Leírás| |:----:|----| |?=|Positive Lookahead| |?!|Negative Lookahead| |?<=|Positive Lookbehind| |? "(T|t)he(?=\sfat)" => The fat cat sat on the mat. [Teszteld a reguláris kifejezést](https://regex101.com/r/IDDARt/1) ### 4.2 Negative Lookahead A negatív előrenézést akkor használjuk, ha az olyan illeszkedések kellenek, amelyeket nem követ egy bizonyos minta. A negatív előrenézést ugyanúgy definiáljuk mint a pozitív előrenézést, az egyetlen különbség, hogy az egyenlőségjel `=` helyett negálást `!` használunk: `(?!...)`. Nézzük meg a következő kifejezést: `(T|t)he(?!\sfat)`, jelentése: szedd ki az összes `The` vagy `the` szót, amelyeket nem követ a `fat` szó (amit még megelőz egy szóköz).
"(T|t)he(?!\sfat)" => The fat cat sat on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/V32Npg/1) ### 4.3 Positive Lookbehind A pozitív hátranézést akkor használjuk, ha kell az összes illeszkedés, amit egy megadott minta előz meg. A pozitív hátranézés így van jelölve: `(?<=...)`. A `(?<=(T|t)he\s)(fat|mat)` jelentése: szedd ki az összes `fat` vagy `mat` szót amelyek a `The` vagy a `the` szavak után vannak.
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/avH165/1) ### 4.4 Negative Lookbehind A negatív hátranézést akkor használjuk, ha kell az összes illeszkedés, amit nem egy megadott minta előz meg. Jelölése: `(? "(?<!(T|t)he\s)(cat)" => The cat sat on cat. [Teszteld a reguláris kifejezést](https://regex101.com/r/8Efx5G/1) ## 5. Flag-ek A flag-eket módosítónak hívják, mert módosítják a reguláris kifejezés kimenetét. Ezeket a flag-eket bármilyen sorban vagy kombinációban lehet használni, a RegExp szerves részét képezik. |Flag|Leírás| |:----:|----| |i|Kis-nagybetű érzéketlen: Beállítja, hogy az illeszkedés kis-nagybetű érzéketlen legyen.| |g|Globális keresés: A bemeneti szövegben mindenütt keresi az illeszkedéseket.| |m|Többsoros: A horgonyok az összes sorra működnek.| ### 5.1 Kis-nagybetű érzéketlen Az `i` módosító beállítja, hogy az illeszkedés ne legyen kis-nagybetű érzékeny. Például a `/The/gi` kifejezés jelentése: nagybetűs `T` amit kisbetűs `h`, majd `e` követ. A kifejezés végén az `i` megmondja a reguláris kifejezés motornak, hogy hagyja figyelmen kívül a betűk méretét. Ahogy látod, megadtuk a `g` flag-et, mert az egész bemeneti szövegben akarjuk keresni az illeszkedéseket.
"The" => The fat cat sat on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/dpQyf9/1)
"/The/gi" => The fat cat sat on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/ahfiuh/1) ### 5.2 Globális keresés A `g` módosítót arra használjuk, hogy globálisan keressünk illeszkedéseket. (Megkeresi az összes előfordulást, nem áll meg az első egyezés után). Például a `/.(at)/g` kifejezés jelentése: minden karakter, kivéve a sortörést, amelyet `a` és `t` követ. Mivel megadtuk a `g` flag-et, az összes ilyenre fog illeszkedni, nem csak az elsőre (ami az alapértelmezett viselkedés).
"/.(at)/" => The fat cat sat on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/jnk6gM/1)
"/.(at)/g" => The fat cat sat on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/dO1nef/1) ### 5.3 Többsoros Az `m` módosítót a többsoros illeszkedésekhez használjuk. Ahogy előzőleg beszéltük, a horgonyokat `(^, $)` arra használjuk, hogy megnézzük, a minta az eleje, vagy a vége-e a vizsgált karakterláncnak. De ha azt szeretnénk, hogy a horgonyok az összes soron működjenek, használjuk az `m` módosítót. Például a `/at(.)?$/gm` kifejezés jelentése: kisbetűs `a` karakter, amit egy kisbetűs `t` követ, amit opcionálisan bármi követhet, kivéve sortörés. És az `m` flag miatt a reguláris kifejezés motor az összes sor végéig keres illeszkedést.
"/.at(.)?$/" => The fat cat sat on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/hoGMkP/1)
"/.at(.)?$/gm" => The fat cat sat on the mat.[Teszteld a reguláris kifejezést](https://regex101.com/r/E88WE2/1) ## Hozzájárulás * Jelents hibákat * Nyiss pull request-eket fejlesztésekkel * Hírdesd az igét * Érj el közvetlenül itt: ziishaned@gmail.com vagy [](https://twitter.com/ziishaned) ## Licenc MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned)