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" |
\x nn |
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" |
\c X\c x |
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) |
\u nnnn |
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 \x2A a , é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ől az 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 |
(?< név > subexpression ) vagy (?' név ' subexpression ) |
A egyeztetett alexpressziót egy elnevezett csoportba rögzíti. | (?<double>\w)\k<double> |
"ee" a(z) "deep" rendszerben |
(?< név1 - név2 > subexpression ) vagy (?' név1 - név2 ' 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" in "cats, dogs and some mice." |
(?! subexpression ) |
Nulla szélességű negatív lookahead-állítás. | \b\w+\b(?!.+and.+) |
"and" , , "some" "mice" in "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" in "cats, dogs and some mice." ———————————— "and" , , "some" "mice" in "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" in "cats, dogs and some mice." ———————————— "cats" , "dogs" in "cats, dogs and some mice." |
(?> subexpression ) |
Atomi csoport. | '(?>a|ab)c | "ac" ban"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 vegyes szerkezettel
(?imnsx-imnsx)
, ahol egy beállítás vagy beállításkészlet előtt egy 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ít | 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+\b egyezések "ABA" , "Able" "ABA Able Act" |
(?# megjegyzés ) |
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 |