Reguláris kifejezés nyelve – rövid útmutató

A reguláris kifejezés olyan minta, amelyet a reguláris kifejezésmotor a bemeneti szövegben próbál egyeztetni. A minta egy vagy több karakterkonstansból, operátorból vagy szerkezetből áll. Rövid bevezetést a .NET Reguláris kifejezések című témakörben talál.

A rövid útmutató minden szakasza felsorolja a karakterek, operátorok és szerkezetek egy adott kategóriáját, amellyel reguláris kifejezéseket definiálhat.

Ezt az információt két formátumban is rendelkezésre bocsátottuk, amelyek könnyen letölthetők és nyomtathatók:

Karaktermenekülések

A normál kifejezésben a fordított perjel karakter (\) azt jelzi, hogy az azt követő karakter vagy speciális karakter (ahogy az a következő táblázatban is látható), vagy szó szerint kell értelmezni. További információ: Karaktermenekülések.

Szökött karakter Leírás Minta Egyezik
\a Megfelel a \u0007 nevű harang karakternek. \a "\u0007" a(z) "Error!" + '\u0007' rendszerben
\b Egy karakterosztályban egy \u0008 nevű háttértérrel egyezik. [\b]{3,} "\b\b\b\b" a(z) "\b\b\b\b" rendszerben
\t Egy \u0009 lapnak felel meg. (\w+)\t "item1\t", in "item2\t""item1\titem2\t"
\r Megegyezik a \u000D kocsivisszaval. (\r nem egyenértékű az új vonal karakterével, \n.) \r\n(\w+) "\r\nThese" a(z) "\r\nThese are\ntwo lines." rendszerben
\v Megfelel a \u000B függőleges lapnak. [\v]{2,} "\v\v\v" a(z) "\v\v\v" rendszerben
\f Megfelel egy \u000C nevű űrlapcsatornának. [\f]{2,} "\f\f\f" a(z) "\f\f\f" rendszerben
\n Egy új sort (\u000A) ad meg. \r\n(\w+) "\r\nThese" a(z) "\r\nThese are\ntwo lines." rendszerben
\e Megegyezik a \u001B feloldójelével. \e "\x001B" a(z) "\x001B" rendszerben
\Nnn Oktális ábrázolás használatával határoz meg egy karaktert (az nnn két vagy három számjegyből áll). \w\040\w "a b", in "c d""a bc d"
\xNn Hexadecimális ábrázolás használatával határoz meg egy karaktert (az nn pontosan két számjegyből áll). \w\x20\w "a b", in "c d""a bc d"
\cX

\cX
Megegyezik az X vagy x által megadott ASCII vezérlő karakterével, ahol az X vagy x a vezérlő karakter betűje. \cC "\x0003" in "\x0003" (Ctrl-C)
\unnnn Egy Unicode-karaktert hexadecimális ábrázolással (pontosan négy számjegy, az nnnn által ábrázolt módon) egyezik meg. \w\u0020\w "a b", in "c d""a bc d"
\ Ha olyan karaktert követ, amely nem ismerhető fel szökött karakterként ebben a témakörben és a jelen témakör többi táblázatában, akkor az megegyezik ezzel a karakterrel. Például ugyanaz, \* mint \x2Aa , és \. ugyanaz, mint \x2E. Ez lehetővé teszi, hogy a reguláris kifejezésmotor egyértelműsítse a nyelvi elemeket (például * vagy ?) és a karakterkonstansokat (amelyeket vagy \?azokat \* jelöl). \d+[\+-x\*]\d+ "2+2" és "3*9", itt: "(2+2) * 3*9"

Karakterosztályok

A karakterosztály egyezik a karakterkészletek bármelyikével. A karakterosztályok az alábbi táblázatban felsorolt nyelvi elemeket tartalmazzák. További információ: Karakterosztályok.

Karakterosztály Leírás Minta Egyezik
[character_group] Egyezik a character_group bármelyik karakterét. Alapértelmezés szerint az egyezés megkülönbözteti a kis- és nagybetűk értékét. [ae] "a" a(z) "gray" rendszerben

"a", in "e""lane"
[^character_group] Tagadás: Egyezik a character_group nem szereplő egyetlen karakterel. Alapértelmezés szerint a character_group karakterei megkülönböztetik a kis- és nagybetűket. [^aei] "r", , "g""n""reign"
[első-utolsó] Karaktertartomány: Egyezik az elsőtőlaz utolsóig terjedő tartomány egyetlen karakterével. [A-Z] "A", in "B""AB123"
. Helyettesítő karakter: Egyetlen karaktert ad meg, kivéve \n.

Ha egy literál pont karaktert (. vagy \u002E) szeretne egyezni, akkor azt a feloldó karakterrel (\.) kell megelőznie.
a.e "ave" a(z) "nave" rendszerben

"ate" a(z) "water" rendszerben
\p{név} A Unicode általános kategóriájában vagy a név alapján megadott elnevezett blokkban szereplő egyetlen karakternek felel meg. \p{Lu}

\p{IsCyrillic}
"C", in "L""City Lights"

"Д", in "Ж""ДЖem"
\P{név} Megfelel minden olyan karakternek, amely nem szerepel a Unicode általános kategóriájában vagy a név szerint megadott elnevezett blokkban. \P{Lu}

\P{IsCyrillic}
"i", , "t""y""City"

"e", in "m""ДЖem"
\w Bármely szó karakterének megfelel. \w "I", "D", "A", "1"in "3""ID A1.3"
\W Egyezik a szó nélküli karaktert. \W " ", in ".""ID A1.3"
\s Egyezik bármely szóköz karakterrel. \w\s "D " a(z) "ID A1.3" rendszerben
\S Egyezik a szóközzel nem rendelkező karakterrel. \s\S " _" a(z) "int __ctr" rendszerben
\d Bármely tizedesjegynek megfelel. \d "4" a(z) "4 = IV" rendszerben
\D A tizedesjegyen kívüli karaktereket is megfelelteti. \D " ", "=", " ", "I"in "V""4 = IV"

Horgonyok

A horgonyok vagy az atomi nullaszélességű állítások a sztring aktuális helyzetétől függően sikeres vagy sikertelen egyezést okoznak, de nem okozzák, hogy a motor végiglépkedjen a sztringen, vagy használjon karaktereket. Az alábbi táblázatban szereplő metacharacterek horgonyok. További információ: Horgonyok.

Állítás Leírás Minta Egyezik
^ Alapértelmezés szerint az egyezésnek a sztring elején kell kezdődnie; többsoros módban a sor elején kell kezdődnie. ^\d{3} "901" a(z) "901-333-" rendszerben
$ Alapértelmezés szerint az egyezésnek a sztring végén vagy \n a sztring végén kell történnie; többsoros módban a sor vége vagy a sor vége előtt \n kell történnie. -\d{3}$ "-333" a(z) "-901-333" rendszerben
\A Az egyezésnek a sztring elején kell történnie. \A\d{3} "901" a(z) "901-333-" rendszerben
\Z Az egyezésnek a sztring végén vagy a sztring végén kell \n történnie. -\d{3}\Z "-333" a(z) "-901-333" rendszerben
\z Az egyezésnek a sztring végén kell történnie. -\d{3}\z "-333" a(z) "-901-333" rendszerben
\G Az egyezésnek azon a ponton kell történnie, ahol az előző találat véget ért, vagy ha nem volt korábbi egyezés, abban a sztringben, ahol az egyeztetés elkezdődött. \G\(\d\) "(1)", , "(3)""(5)""(1)(3)(5)[7](9)"
\b Az egyezésnek egy \w (alfanumerikus) és egy \W (nonalphanumerikus) karakter közötti határon kell történnie. \b\w+\s\w+\b "them theme", in "them them""them theme them them"
\B Az egyezés nem történhet határvonalon \b . \Bend\w*\b "ends", in "ender""end sends endure lender"

Szerkezetek csoportosítása

A csoportosítási szerkezetek egy reguláris kifejezés alexpresszióit, és általában egy bemeneti sztring részsztringjeinek rögzítését rögzítik. A csoportosítási szerkezetek tartalmazzák az alábbi táblázatban felsorolt nyelvi elemeket. További információ: Csoportosítási szerkezetek.

Csoportosítási szerkezet Leírás Minta Egyezik
(subexpression) Rögzíti a megfeleltetett altartományt, és egy egy-alapú sorszámot rendel hozzá. (\w)\1 "ee" a(z) "deep" rendszerben
(?<name>subexpression)
vagy
(?'name'subexpression)
A egyeztetett alexpressziót egy elnevezett csoportba rögzíti. (?<double>\w)\k<double> "ee" a(z) "deep" rendszerben
(?<name1-name2>subexpression)
vagy
(?'name1-name2'subexpression)
Kiegyensúlyozó csoport definícióját határozza meg. További információt a Csoportosítási szerkezetek "Kiegyensúlyozási csoportdefiníció" című szakaszában talál. (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ "((1-3)*(3-1))" a(z) "3+2^((1-3)*(3-1))" rendszerben
(?:subexpression) Nem össze nem foglalható csoportot határoz meg. Write(?:Line)? "WriteLine" a(z) "Console.WriteLine()" rendszerben

"Write" a(z) "Console.Write(value)" rendszerben
(?imnsx-imnsx:subexpression) Alkalmazza vagy letiltja a megadott beállításokat a subexpressionon belül. További információ: Reguláris kifejezés beállításai. A\d{2}(?i:\w+)\b "A12xl", in "A12XL""A12xl A12XL a12xl"
(?=subexpression) Nulla szélességű pozitív lookahead-állítás. \b\w+\b(?=.+and.+) "cats", "dogs"
be
"cats, dogs and some mice."
(?!subexpression) Nulla szélességű negatív lookahead-állítás. \b\w+\b(?!.+and.+) "and", , "some""mice"
be
"cats, dogs and some mice."
(?<=subexpression) Nulla szélességű pozitív lookbehind helyesség. \b\w+\b(?<=.+and.+)

———————————

\b\w+\b(?<=.+and.*)
"some", "mice"
be
"cats, dogs and some mice."
————————————
"and", , "some""mice"
be
"cats, dogs and some mice."
(?<!subexpression) Nulla szélességű negatív lookbehind helyesség. \b\w+\b(?<!.+and.+)

———————————

\b\w+\b(?<!.+and.*)
"cats", , "dogs""and"
be
"cats, dogs and some mice."
————————————
"cats", "dogs"
be
"cats, dogs and some mice."
(?>subexpression) Atomi csoport. '(?>a|ab)c "ac" a következőben:"ac"

nincs benne semmi"abc"

Megoldások egy pillantással

Amikor a reguláris kifejezésmotor megkeresi a keresett kifejezést, az aktuális pozíciótól az eredeti sztring elejéig (lookbehind) vagy végéig (lookahead) ér el egy sztringet, majd a keresési minta használatával futtatja Regex.IsMatch az adott alsztringet. A szubexpresszió eredményének sikerességét ezután az határozza meg, hogy pozitív vagy negatív állításról van-e szó.

Megoldás Név Függvény
(?=check) Pozitív lookahead Azt állítja, hogy a sztring aktuális pozícióját azonnal követő "ellenőrzés"
(?<=check) Pozitív lookbehind Azt állítja, hogy a sztring aktuális pozícióját közvetlenül megelőző "ellenőrzés"
(?!check) Negatív lookahead Azt állítja, hogy a sztring aktuális pozícióját közvetlenül követő érték nem "ellenőrzés"
(?<!check) Negatív lookbehind Azt állítja, hogy ami közvetlenül a sztring aktuális pozícióját megelőzi, az nem "ellenőrzés"

A megfeleltetés után az atomi csoportok nem lesznek újra kiértékelve, még akkor sem, ha a minta fennmaradó része az egyezés miatt meghiúsul. Ez jelentősen javíthatja a teljesítményt, ha a kvantátorok az atomi csoportban vagy a minta fennmaradó részében fordulnak elő.

Kvantitátorok

A kvantáló megadja, hogy az előző elem (amely lehet egy karakter, egy csoport vagy egy karakterosztály) hány példánya legyen jelen a bemeneti sztringben egyezés bekövetkezéséhez. A kvantátorok az alábbi táblázatban felsorolt nyelvi elemeket tartalmazzák. További információ: Kvantitátorok.

Quantifier Leírás Minta Egyezik
* Megegyezik az előző elem nullával vagy több alkalommal. a.*c "abcbc" a(z) "abcbc" rendszerben
+ Egy vagy több alkalommal megfelel az előző elemnek. "be+" "bee" in "been", "be" in "bent"
? Megegyezik az előző elem nullával vagy egyszer. "rai?" "rai" a(z) "rain" rendszerben
{N} Pontosan n-szer egyezik az előző elemével. ",\d{3}" ",043" be "1,043.6", ",876", ",543"és ",210" be "9,876,543,210"
{N,} Az előző elemnek legalább n-szer felel meg. "\d{2,}" "166", , "29""1930"
{n,m} Az előző elemet legalább n-szer , de legfeljebb m alkalommal egyezteti meg. "\d{3,5}" "166", "17668"

"19302" a(z) "193024" rendszerben
*? Az előző elem nulla vagy több alkalommal, de a lehető legkevesebb alkalommal felel meg. a.*?c "abc" a(z) "abcbc" rendszerben
+? Egy vagy több alkalommal, de a lehető legkevesebb alkalommal felel meg az előző elemnek. "be+?" "be" in "been", "be" in "bent"
?? Megegyezik az előző elem nullával vagy egyszer, de a lehető legkevesebb alkalommal. "rai??" "ra" a(z) "rain" rendszerben
{N}? Pontosan n-szer egyezik meg az előző elemet. ",\d{3}?" ",043" be "1,043.6", ",876", ",543"és ",210" be "9,876,543,210"
{N,}? Az előző elemet legalább n alkalommal, de a lehető legkevesebb alkalommal egyezteti meg. "\d{2,}?" "166", , "29""1930"
{n,m}? Megfelel az előző elemnek n és m között, de a lehető legkevesebb alkalommal. "\d{3,5}?" "166", "17668"

"193", in "024""193024"

Háttérszerkezetek

A visszalépés lehetővé teszi, hogy a korábban egyeztetett alexpressziók később azonos reguláris kifejezésben azonosíthatók legyenek. Az alábbi táblázat a .NET-ben lévő reguláris kifejezések által támogatott háttérbeli szerkezeteket sorolja fel. További információ: Backreference Constructs.

Háttérrendszer felépítése Leírás Minta Egyezik
\Szám Visszalépés. Egy számozott alexpresszió értékét adja meg. (\w)\1 "ee" a(z) "seek" rendszerben
\k<név> Elnevezett háttérrendszer. Megegyezik egy elnevezett kifejezés értékével. (?<char>\w)\k<char> "ee" a(z) "seek" rendszerben

Alternation Constructs

Az alternation szerkezetek módosítanak egy reguláris kifejezést, hogy engedélyezhessék vagy egyeztethessék azokat. Ezek a szerkezetek tartalmazzák az alábbi táblázatban felsorolt nyelvi elemeket. További információ: Alternation Constructs.

Alternation construct Leírás Minta Egyezik
| Megfelel a függőleges sáv (|) karakter által elválasztott bármely elemnek. th(e|is|at) "the", in "this""this is the day."
(?(kifejezés)igen|nem)
vagy
(?(kifejezés)igen)
Igennel egyezik, ha a kifejezés által kijelölt reguláris kifejezésminta megegyezik; ellenkező esetben a nem kötelező résznek felel meg. a kifejezés nulla szélességű állításként van értelmezve.

Ha elnevezett vagy számozott rögzítési csoporttal szeretné elkerülni a kétértelműséget, használhat explicit állítást, például a következőt:
(?( (?=kifejezés) )igen|nem)
(?(A)A\d{2}\b|\b\d{3}\b) "A10", in "910""A10 C103 910"
(?(név)igen|nem)
vagy
(?(név)igen)
Igennel egyezik, ha egy név, egy elnevezett vagy számozott rögzítési csoport megegyezik; ellenkező esetben a nem kötelező nem. (?<quoted>")?(?(quoted).+?"|\S+\s) "Dogs.jpg ", in "\"Yiska playing.jpg\"""Dogs.jpg \"Yiska playing.jpg\""

Helyettesítések

A helyettesítések olyan reguláris kifejezésnyelvi elemek, amelyeket a helyettesítő minták támogatnak. További információ: Helyettesítések. Az alábbi táblázatban felsorolt metacharacterek atomi nullaszélességű állítások.

Karakter Leírás Minta Csereminta Bemeneti sztring Eredménysztring
$Szám A csoportszám alapján egyeztetett részszűrést helyettesíti. \b(\w+)(\s)(\w+)\b $3$2$1 "one two" "two one"
${név} A névvel ellátott csoportnévvel egyező részszűrést helyettesíti. \b(?<word1>\w+)(\s)(?<word2>\w+)\b ${word2} ${word1} "one two" "two one"
$$ A "$" literál helyébe lép. \b(\d+)\s?USD $$$1 "103 USD" "$103"
$& A teljes egyezés másolatát helyettesíti. \$?\d*\.?\d+ **$&** "$1.30" "**$1.30**"
$` A beviteli sztring összes szövegének helyettesítése az egyezés előtt. B+ $` "AABBCC" "AAAACC"
$' Az egyezés után a bemeneti sztring összes szövegét lecseréli. B+ $' "AABBCC" "AACCCC"
$+ Az utolsó rögzített csoportot helyettesíti. B+(C+) $+ "AABBCCDD" "AACCDD"
$_ A teljes bemeneti sztringet helyettesíti. B+ $_ "AABBCC" "AAAABBCCCC"

Reguláris kifejezés beállításai

Megadhatja azokat a beállításokat, amelyek szabályozzák, hogy a reguláris kifejezésmotor hogyan értelmezi a reguláris kifejezésmintát. Ezen lehetőségek közül számos megadható beágyazott (a reguláris kifejezési mintában) vagy egy vagy több RegexOptions állandóként. Ez a rövid útmutató csak a beágyazott beállításokat sorolja fel. A beágyazott szöveggel és RegexOptions a beállításokkal kapcsolatos további információkért tekintse meg a Reguláris kifejezés beállításai című cikket.

A beágyazott beállításokat kétféleképpen adhatja meg:

  • A különböző szerkezettel(?imnsx-imnsx), ahol egy beállítás vagy beállításkészlet előtti mínuszjel (-) kikapcsolja ezeket a beállításokat. Bekapcsolhatja például a (?i-mn) kis- és nagybetűk megkülönböztethetetlen egyezését (i), kikapcsolhatja a többsoros módot (m) és kikapcsolhatja a névtelen csoportrögzítéseket (n). A beállítás a reguláris kifejezési mintára vonatkozik attól a ponttól kezdve, ahol a beállítás meg van határozva, és a minta végéig vagy arra a pontra érvényes, ahol egy másik szerkezet megfordítja a beállítást.
  • A csoportosítási szerkezet(?imnsx-imnsx:alexpressziójának) használatával, amely csak a megadott csoport beállításait határozza meg.

A .NET reguláris kifejezésmotor a következő beágyazott beállításokat támogatja:

Lehetőség Leírás Minta Egyezik
i Használjon kis- és nagybetűket nem érzékelyítő egyezést. \b(?i)a(?-i)a\w+\b "aardvark", in "aaaAuto""aardvark AAAuto aaaAuto Adam breakfast"
m Használjon többsoros módot. ^ és $ egy sor elejével és végének felel meg a sztring kezdete és vége helyett. Példa: "Többsoros mód" szakasz a Reguláris kifejezés beállításaiban.
n Ne rögzítsen névtelen csoportokat. Példa: "Explicit Captures Only" (Csak explicit rögzítések) szakasz a Reguláris kifejezés beállításaiban.
s Használjon egysoros módot. Példa: "Egysoros mód" szakasz a Reguláris kifejezés beállításaiban.
x A normál kifejezésmintában hagyja figyelmen kívül a nem kibontott szóközt. \b(?x) \d+ \s \w+ "1 aardvark", in "2 cats""1 aardvark 2 cats IV centurions"

Egyéb szerkezetek

A különböző szerkezetek vagy módosítanak egy reguláris kifejezésmintát, vagy információt adnak róla. Az alábbi táblázat a .NET által támogatott egyéb szerkezeteket sorolja fel. További információ: Vegyes szerkezetek.

Építeni Definíció Példa
(?imnsx-imnsx) Beállítja vagy letiltja az olyan beállításokat, mint a kis- és nagybetűk érzéketlensége a minta közepén. További információ: Reguláris kifejezés beállításai. \bA(?i)b\w+\begyezések "ABA", "Able""ABA Able Act"
(?#Megjegyzést) Beágyazott megjegyzés. A megjegyzés az első záró zárójelben fejeződik be. \bA(?#Matches words starting with A)\w+\b
# [a sor végéig] X módú megjegyzés. A megjegyzés egy lezáratlan # időpontban kezdődik, és a sor végéig tart. (?x)\bA\w+\b#Matches words starting with A

Lásd még