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:

Szabályos kifejezés

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

  • 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 imó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 a
m 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.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.