PDF letöltése
A szabályos kifejezés olyan karakterek vagy szimbólumok csoportja, amelyeket arra használnak, hogy egy adott mintát találjanak valamilyen szövegből; nevezhetjük őket szteroidos vadkártyáknak is, ha úgy tetszik. Fejlesztőként a reguláris kifejezések elsajátítása hatékony eszköz lehet az eszköztáradban; egy bizonyos ponton biztosan használnod kell majd őket a programjaidban, a keresés és helyettesítés a reguláris kifejezésekkel az IDE-kben néha nagyon jól jön, és én magam is minden egyes nap használom őket a parancssorban.
A különböző alkalmazások és programozási nyelvek különböző implementációkkal rendelkeznek a reguláris kifejezésekhez, de a mögöttes koncepciók többnyire ugyanazok. Ebben a bejegyzésben elmagyarázok mindent, amit a reguláris kifejezésekről tudni kell.
A reguláris kifejezés egy olyan minta, amely balról jobbra haladva illeszkedik egy tárgysorozathoz. A “reguláris kifejezés” szó eléggé szájbarágós, általában “regex” vagy “regexp” rövidítéssel találod a kifejezést. A reguláris kifejezést egy karakterláncon belüli szöveg helyettesítésére, űrlapok érvényesítésére, részláncok kivonására egy karakterláncból mintaillesztés alapján, és még sok másra használják.
Képzelje el, hogy egy alkalmazást ír, és meg akarja határozni a szabályokat, amikor a felhasználó kiválasztja a felhasználónevét. Szeretnénk megengedni, hogy a felhasználónév betűket, számokat, aláhúzásokat és kötőjeleket tartalmazzon. Szeretnénk korlátozni a felhasználónévben szereplő karakterek számát is, hogy ne nézzen ki csúnyán. A következő szabályos kifejezést használjuk a felhasználónév érvényesítésére:

A fenti szabályos kifejezés elfogadja a john_doe
, jo-hn_doe
és john12_as
karakterláncokat. A Jo
nem felel meg, mert ez a karakterlánc nagybetűket tartalmaz, és túl rövid is.
- Tartalomjegyzék
- Basic Matchers
- Meta karakterek
- 2.1 Pont
- 2.2 Karakterkészlet
- 2.2.1 Negált karakterkészlet
- 2.3 Ismétlések
- 2.3.1 A csillag
- 2.3.2 A Plusz
- 2.3.3 A kérdőjel
- 2.4 Zárójelek
- 2.5 Karaktercsoport
- 2.6 Alternáció
- 2.7 Speciális karakter elkerülés
- 2.8 Horgonyok
- 2.8.1 Caret
- 2.8.2 Dollár
- Szöveges karakterkészletek
- Lookaround
- 4.1 Pozitív kereső
- 4.2 Negatív lookahead
- 4.3 Pozitív lookbehind
- 4.4 Negatív lookbehind
- Flags
- 5.1 Case Insensitive
- 5.2 Globális keresés
- 5.3 Többsoros
- Mohó vs. lusta illesztés
Tartalomjegyzék
- Az alapillesztők
- Meta karakter
- Teljes pont
- Karakterkészlet
- Negatív karakterkészlet
- Megismétlődések
- Az Csillag
- A plusz
- A kérdőjel
- Kérdőjelek
- Karaktercsoport
- Alternáció
- Elmenekülő speciális karakter
- Ankarok
- Caret
- Dollár
- Szortírozott karakterkészletek
- Lookaround
- Pozitív Lookahead
- Negatív Lookahead
- Pozitív Lookbehind
- Flags
- Case Insensitive
- Globális keresés
- Multiline
- Greedy vs lazy matching
Basic Matchers
A reguláris kifejezés nem más, mint egy karakterekből álló minta, amelyet arra használunk, hogy egy szövegben
keresést végezzünk. Például a the
szabályos kifejezés azt jelenti: a betűt
, majd a betű h
, majd a betű e
.
the => The fat cat sat on the mat.
Teszteljük a szabályos kifejezést
A 123
szabályos kifejezés 123
megfelel a 123
karakterláncnak. A szabályos kifejezést a bemeneti karakterlánccal úgy vetjük össze, hogy a szabályos
kifejezés minden egyes karakterét egymás után összehasonlítjuk a bemeneti karakterlánc minden egyes karakterével. A reguláris
kifejezések általában nagy- és kisbetű-érzékenyek, így a The
reguláris kifejezés
nem illeszkedne a the
karakterláncra.
The => The fat cat sat on the mat.
Teszteljük a reguláris kifejezést
Meta karakterek
A metakarakterek a reguláris kifejezések építőkövei. A meta
karakterek nem önmagukért állnak, hanem valamilyen
speciális módon értelmezik őket. Egyes metakarakterek különleges jelentéssel bírnak, és szögletes zárójelekbe vannak írva. A metakarakterek a következők:

2.1 Pont
A pont . a legegyszerűbb példa a metakarakterekre. A metakarakter .
minden egyes karakterrel megegyezik. Nem illeszkedik a visszatérő vagy az újsor karakterekhez.
A .ar
szabályos kifejezés például a következőt jelenti: bármely karakter, amelyet a a
betű követ, majd a r
betű.
.ar => The car parked in the garage.
Tesztelje a szabályos kifejezést
2.2 Karakterkészlet
A karakterkészleteket karakterosztályoknak is nevezik. A karakterkészletek
specifikálására szögletes zárójeleket használunk. A karakterkészleten belül kötőjelet használunk a karakterek tartományának megadására. A karaktertartomány sorrendje a szögletes zárójeleken belül
nem számít. Például a he
szabályos kifejezés a következőket jelenti: nagybetűs T
vagy kisbetűs t
, majd h
betű, majd e
betű.
he => The car parked in the garage.
Tesztelje a szabályos kifejezést
Egy karakterkészleten belüli pont azonban szó szerinti pontot jelent. A szabályos
kifejezés ar
azt jelenti: egy kisbetűs karakter a
, amelyet egy r
betű követ,
és egy .
pont karakter követ.
ar => A garage is a good place to park a car.
Teszteljük a szabályos kifejezést
2.2.1 Negált karakterkészlet
A caret szimbólum általában a karakterlánc kezdetét jelöli, de ha
a nyitó szögletes zárójel után írjuk be, akkor negálja a karakterkészletet. A
példa esetében a ar
szabályos kifejezés azt jelenti: bármely karakter, kivéve c
,
a a
karaktert követi, amelyet a r
betű követ.
ar => The car parked in the garage.
Teszteljük a szabályos kifejezést
2.3 Ismétlések
A +
, *
vagy ?
metakaraktereket követően megadható, hogy egy alminta hányszor fordulhat elő. Ezek a meta karakterek különböző
helyzetekben eltérően hatnak.
2.3.1 A csillag
A *
szimbólum az előző megfeleltető nulla vagy több ismétlődésével egyezik meg. A a*
szabályos kifejezés jelentése: az előző a
kisbetűs karakter nulla vagy több ismétlődése. Ha azonban egy karakterkészlet vagy osztály után jelenik meg, akkor a teljes karakterkészlet ismétlődéseit találja meg. Például a *
szabályos kifejezés azt jelenti: tetszőleges számú kisbetű egy sorban.
* => The car parked in the garage #21.
Teszteljük a szabályos kifejezést
A *
szimbólum a . metakarakterrel együtt használható a
karakterek .*
bármely karakterláncának megfeleltetésére. A *
szimbólum a \s
szóköz karakterrel együtt használható a szóköz karakterekből álló karakterlánc illesztésére. Például a\s*cat\s*
kifejezés azt jelenti: nulla vagy több szóköz, majd c
kisbetűs karakter,
után a
kisbetűs karakter, majd t
kisbetűs karakter, majd nulla vagy több szóköz.
\s*cat\s* => The fat cat sat on the concatenation.
A szabályos kifejezés tesztelése
2.3.2 A Plusz
A +
szimbólum az előző karakter egy vagy több ismétlésére illeszkedik. Például a c.+t
szabályos kifejezés a következőt jelenti: c
kisbetű, amelyet legalább egy karakter követ, majd a t
kisbetűs karakter. Tisztázni kell, hogy a t
az utolsó t
a mondatban.
c.+t => The fat cat sat on the mat.
Teszteljük a szabályos kifejezést
2.3.3 A kérdőjel
A szabályos kifejezésben a meta karakter ?
az előző karaktert
választhatóvá teszi. Ez a szimbólum az előző karakter nulla vagy egy példányával egyezik meg. Például a ?he
szabályos kifejezés azt jelenti, hogy: Választható a T
nagybetű, majd a h
kisbetű, majd a e
kisbetű.
he => The car is parked in the garage.
Tesztelje a szabályos kifejezést
?he => The car is parked in the garage.
Tesztelje a szabályos kifejezést
2.4 Zárójelek
A szabályos kifejezésekben a zárójelek, amelyeket kvantoroknak is neveznek, arra szolgálnak, hogy
meghatározzák, hogy egy karakter vagy karaktercsoport hányszor
ismétlődhet. Például a {2,3}
szabályos kifejezés azt jelenti: {2,3}
: Legalább 2 számjegyet, de legfeljebb 3-at ( 0 és 9 közötti karaktereket) egyezzen meg.
{2,3} => The number was 9.9997 but we rounded it off to 10.0.
Teszteljük a szabályos kifejezést
A második számot elhagyhatjuk. Például a{2,}
szabályos kifejezés azt jelenti, hogy: 2 vagy több számjegyre illeszkedik. Ha a vesszőt is eltávolítjuk, a
szabályos kifejezés {3}
azt jelenti:: Pontosan 3 számjegyre illeszkedik.
{2,} => The number was 9.9997 but we rounded it off to 10.0.
Tesztelje a szabályos kifejezést
{3} => The number was 9.9997 but we rounded it off to 10.0.
Tesztelje a szabályos kifejezést
2.5 Karaktercsoport
A karaktercsoport egy almintákból álló csoport, amelyet zárójelben (…)
írunk. Mint már korábban tárgyaltuk, hogy a reguláris kifejezésben, ha egy karakter után kvantifikátort teszünk, akkor az megismétli az előző karaktert. De ha egy karaktercsoport után kvantort teszünk, akkor az egész karaktercsoportot megismétli. Például a (ab)*
szabályos kifejezés a ab
karakter nulla vagy több ismétlődésére illik. Használhatjuk a |
metakarakter váltakozást is karaktercsoporton belül. Például a (c|g|p)ar
szabályos kifejezés azt jelenti: c
, g
vagy p
kisbetűs karakter, majd a
karakter, majd r
karakter.
(c|g|p)ar => The car is parked in the garage.
Teszteljük a szabályos kifejezést
2.6 Alternáció
A szabályos kifejezésben a függőleges sáv |
a váltakozás meghatározására szolgál. A váltakozás olyan, mint egy feltétel több kifejezés között. Most talán azt gondolja, hogy a karakterkészlet és a váltakozás ugyanúgy működik. De a nagy különbség a karakterkészlet és az alternáció között az, hogy a karakterkészlet a karakterek szintjén működik, az alternáció viszont a kifejezések szintjén. Például a (T|t)he|car
szabályos kifejezés azt jelenti: T
nagybetűs karakter vagy t
kisbetűs karakter, majd h
kisbetűs karakter, majd e
kisbetűs karakter vagy c
kisbetűs karakter, majd a
kisbetűs karakter, majd r
kisbetűs karakter.
(T|t)he|car => The car is parked in the garage.
Tesztelje a szabályos kifejezést
2.7 Speciális karakter elkerülés
A \
backslash \
a szabályos kifejezésben a következő karakter elkerüléséhez használatos. Ez
megengedi, hogy szimbólumot adjunk meg illeszkedő karakterként, beleértve a fenntartott
karaktereket { } / \ + * . $ ^ | ?
is. Ha egy speciális karaktert szeretne illeszkedő karakterként használni, akkor írja elé a \-t.
A . szabályos kifejezés például minden karakterrel illeszkedik, kivéve az
Újsor
kivételével. Most a . egy bemeneti karakterláncban a (f|c|m)at\.?
szabályos kifejezés a következőt jelenti: f
, c
vagy m
kisbetű, majd a
kisbetűs
karakter, majd t
kisbetű, majd opcionális .
karakter.
(f|c|m)at\.? => The fat cat sat on the mat.
Teszteljük a reguláris kifejezést
2.8 Horgonyok
A reguláris kifejezésekben a horgonyok segítségével ellenőrizzük, hogy az illeszkedő szimbólum a bemeneti karakterlánc
kezdő vagy befejező szimbóluma. A horgonyoknak két típusa van: Az első típus a Caret ^
, amely azt ellenőrzi, hogy a megfelelő karakter a bemeneti karakterlánc kezdő
karaktere-e, a második típus pedig a Dollar $
, amely azt ellenőrzi, hogy a megfelelő
karakter a bemeneti karakterlánc utolsó karaktere-e.
2.8.1 Caret
A Caret ^
szimbólumot annak ellenőrzésére használjuk, hogy a megfelelő karakter az első karakter
a bemeneti karakterláncban. Ha a következő ^a
szabályos kifejezést (ha a
a kezdő szimbólum) alkalmazzuk a abc
bemeneti karakterláncra, akkor az a
-nek felel meg. De ha a fenti bemeneti karakterláncra a ^b
szabályos kifejezést alkalmazzuk, akkor nem talál semmit. Mert a abc
bemeneti karakterláncban b
nem a kezdő szimbólum. Nézzünk meg egy másik ^(T|t)he
szabályos kifejezést, amely azt jelenti: T
nagybetűs karakter vagy t
kisbetűs karakter a bemeneti karakterlánc kezdőszimbóluma, ezt követi
kisbetűs karakter h
, majd e
kisbetűs karakter.
(T|t)he => The car is parked in the garage.
A szabályos kifejezés tesztelése
^(T|t)he => The car is parked in the garage.
A szabályos kifejezés tesztelése
2.8.2 Dollár
Dollár $
szimbólummal ellenőrzi, hogy a megfelelő karakter az utolsó karakter
a bemeneti karakterláncban. Például a (at\.)$
szabályos kifejezés azt jelenti: a
kisbetűs karakter, majd t
kisbetűs karakter, majd .
karakter, és az illesztőnek a karakterlánc végén kell lennie.
(at\.) => The fat cat. sat. on the mat.
Tesztelje a reguláris kifejezést
(at\.)$ => The fat cat. sat. on the mat.
Tesztelje a reguláris kifejezést
Szöveges karakterkészletek
A reguláris kifejezés rövidítéseket biztosít a gyakran használt karakterkészletekhez, amelyek kényelmes rövidítéseket kínálnak a gyakran használt reguláris kifejezésekhez. A gyorsírási karakterkészletek a következők:

Lookaround
A lookbehind és lookahead (más néven lookaround) a
nemmegragadó csoportok speciális típusai (A minta megfeleltetésére szolgálnak, de nem szerepelnek a megfelelő listában). A lookaheads-et akkor használjuk, ha az a feltételünk, hogy ezt a mintát megelőzi vagy követi egy másik bizonyos minta. Például a következő .44 and .88
bemeneti karakterláncból az összes olyan számot szeretnénk megszerezni, amelyet $
karakter előz meg. A következő (?<=$)*
szabályos kifejezést fogjuk használni, ami azt jelenti: megkapjuk az összes olyan számot, amely tartalmazza a . karaktert, és amelyet a $
karakter előz meg. Az alábbiakban a reguláris kifejezésekben használt keresőkifejezések következnek:

4.1 Pozitív kereső
A pozitív kereső azt állítja, hogy a kifejezés első része után
a kereső kifejezésnek kell következnie. A visszaadott találat csak azt a szöveget tartalmazza, amelyre a kifejezés első része illik. A pozitív
lookahead meghatározásához zárójeleket használunk. A zárójeleken belül egy kérdőjelet használunk egyenlőségjellel, így: (?=…)
. A Lookahead kifejezést az egyenlőségjel után, a zárójelek között kell leírni. Például a (T|t)he(?=\sfat)
szabályos kifejezés azt jelenti: opcionálisan illeszkedik a t
kisbetűs vagy T
nagybetűs betűhöz, amelyet h
betű, majd e
betű követ. A zárójelben pozitív lookaheadet definiálunk, amely azt mondja a reguláris kifejezés motorjának, hogy illessze a The
vagy the
betűket, amelyeket a fat
szó követ.
(T|t)he(?=\sfat) => The fat cat sat on the mat.
Teszteljük a reguláris kifejezést
4.2 Negatív lookahead
A negatív lookaheadet akkor használjuk, ha a bemeneti karakterláncból
az összes olyan találatot szeretnénk megkapni, amelyet nem követ egy minta. A negatív lookahead ugyanúgy van definiálva, mint a pozitív lookahead, de az egyetlen különbség az, hogy az egyenlő =
karakter helyett !
negációs karaktert használunk, azaz (?!…)
. Nézzük meg a következő (T|t)he(?!\sfat)
szabályos kifejezést, amely azt jelenti: az összes The
vagy the
szó kinyerése a bemeneti karakterláncból, amelyet nem követ a fat
szó, amelyet egy szóköz karakter előz meg.
(T|t)he(?!\sfat) => The fat cat sat on the mat.
Teszteljük a szabályos kifejezést
4.3 Pozitív lookbehind
Pozitív lookbehind arra szolgál, hogy minden olyan találatot kinyerjünk, amelyet egy
specifikus minta előz meg. A pozitív lookbehind-et (?<=…)
jelöli. Például a (?<=(T|t)he\s)(fat|mat)
szabályos kifejezés azt jelenti: a bemeneti karakterláncból az összes fat
vagy mat
szó kinyerése, amely a The
vagy the
szó után van.
(?<=(T|t)he\s)(fat|mat) => The fat cat sat on the mat.
Tesztelje a szabályos kifejezést
4.4 Negatív lookbehind
Negatív lookbehind az összes olyan találat kinyerésére szolgál, amelyet nem előz meg egy
specifikus minta. A negatív lookbehind-et (?<!…)
jelöli. Például a (?<!(T|t)he\s)(cat)
reguláris kifejezés a következőt jelenti: az összes cat
szó kinyerése a bemeneti karakterláncból, amely nem a The
vagy the
szó után van.
(?<!(T|t)he\s)(cat) => The cat sat on cat.
Teszteli a reguláris kifejezést
Flags
A flageket módosítóknak is nevezik, mert módosítják a reguláris
kifejezés kimenetét. Ezek a flag-ek tetszőleges sorrendben és kombinációban használhatók, és a RegExp
szerves részét képezik.

5.1 Case Insensitive
A i
módosító a case-insensitive illesztés végrehajtására szolgál. Például a /The/gi
szabályos kifejezés a következőt jelenti: T
nagybetű, majd h
kisbetű, majd e
karakter. A reguláris kifejezés végén pedig a i
jelző azt mondja a reguláris kifejezésmotornak, hogy hagyja figyelmen kívül a nagy- és kisbetűket. Mint látható, a g
jelzőt is megadtuk, mert a mintát a teljes bemeneti karakterláncban szeretnénk keresni.
The => The fat cat sat on the mat.
Teszteljük a reguláris kifejezést
/The/gi => The fat cat sat on the mat.
Teszteljük a reguláris kifejezést
5.2 Globális keresés
A g
módosítót globális egyezés végrehajtásához használjuk (az összes találatot keresi, és nem áll meg az első találat után). Például a /.(at)/g
szabályos kifejezés a következőt jelenti: bármely karakter, kivéve új sor, utána kisbetűs karakter a
, utána kisbetűs karakter t
. Mivel a g
jelzőt adtuk meg a reguláris kifejezés végén, most már az összes találatot megtalálja a bemeneti karakterláncban, nem csak az elsőt (ami az alapértelmezett viselkedés).
/.(at)/ => The fat cat sat on the mat.
Tesztelje a reguláris kifejezést
/.(at)/g => The fat cat sat on the mat.
Tesztelje a reguláris kifejezést
5.3 Többsoros
A m
módosító a többsoros egyezés végrehajtásához használható. Amint azt korábban már tárgyaltuk
a (^, $)
horgonyokat arra használjuk, hogy ellenőrizzük, hogy a minta a bemeneti karakterlánc eleje vagy vége. De ha azt akarjuk, hogy a horgonyok minden egyes sorban működjenek, akkor használjuk am
jelzőt. Például a /at(.)?$/gm
szabályos kifejezés azt jelenti: kisbetűs
karakter a
, utána kisbetűs t karakter, opcionálisan bármi, kivéve
új sor. És a m
flag miatt most a reguláris kifejezések motorja a karakterlánc minden sorának végén illeszti a mintát.
/.at(.)?$/ => The fat
cat sat
on the mat.
Tesztelje a reguláris kifejezést
"/.at(.)?$/gm" => The fat
cat sat
on the mat.
Tesztelje a reguláris kifejezést
Mohó vs. lusta illesztés
A regex alapértelmezés szerint mohó illesztést végez, ami azt jelenti, hogy addig illeszt, ameddig
lehet. Használhatjuk a ?
lusta módon való megfeleltetést, ami azt jelenti, hogy olyan rövid, amennyire csak lehetséges
/(.*at)/ => The fat cat sat on the mat.
Teszteljük a reguláris kifejezést
/(.*?at)/ => The fat cat sat on the mat.
Teszteljük a reguláris kifejezést
És ezzel véget is ér ez a bejegyzés. Remélem, hogy ez a bejegyzés hasznos volt. Győződjön meg róla, hogy gyakorolja a tanultakat az olyan szolgáltatások segítségével, mint a regexr.com vagy a regex101.com.