Jazyk regulárních výrazů – stručná referenční dokumentace
Regulární výraz je vzor, který modul regulárních výrazů porovnává se vstupním textem. Vzor sestává z jednoho nebo více znakových literálů, operátorů nebo konstrukcí. Stručný úvod najdete v tématu Regulární výrazy .NET.
Každá část v této stručné referenční tabulce obsahuje konkrétní kategorii znaků, operátorů a konstrukcí, které můžete použít k definování regulárních výrazů.
Tyto informace jsme také poskytli ve dvou formátech, které si můžete stáhnout a vytisknout pro snadné použití:
Řídicí znaky
Znak zpětného lomítka ( ) v regulárním výrazu označuje, že následující znak je buď speciální znak (jak je znázorněno v následující tabulce), nebo by měl být \ interpretován doslova. Další informace najdete v tématu o řídicích znakech.
| Řídicí znak | Popis | Vzor | Shody |
|---|---|---|---|
\a |
Odpovídá znaku bell \u0007. | \a |
"\u0007" v "Error!" + '\u0007' |
\b |
Ve třídě znaků odpovídá znaku Backspace \u0008. | [\b]{3,} |
"\b\b\b\b" v "\b\b\b\b" |
\t |
Odpovídá znaku tabulátoru \u0009. | (\w+)\t |
"item1\t", "item2\t" v "item1\titem2\t" |
\r |
Odpovídá návratovému znaku \u000D. ( \r není ekvivalentem znaku nového řádku, \n .) |
\r\n(\w+) |
"\r\nThese" v "\r\nThese are\ntwo lines." |
\v |
Odpovídá znaku svislého tabulátoru \u000B. | [\v]{2,} |
"\v\v\v" v "\v\v\v" |
\f |
Odpovídá znaku posunu strany \u000C. | [\f]{2,} |
"\f\f\f" v "\f\f\f" |
\n |
Odpovídá znaku nového řádku \u000A. | \r\n(\w+) |
"\r\nThese" v "\r\nThese are\ntwo lines." |
\e |
Odpovídá řídicímu znaku \u001B. | \e |
"\x001B" v "\x001B" |
\nnn |
Používá osmičkové vyjádření k určení znaku (nnn se skládá ze dvou nebo tří číslic). | \w\040\w |
"a b", "c d" v "a bc d" |
\x nn |
Používá šestnáctkové vyjádření k určení znaku (nn se skládá z přesně dvou číslic). | \w\x20\w |
"a b", "c d" v "a bc d" |
\cX\c x |
Odpovídá řídicímu znaku ASCII, který je určen X nebo x, kde X nebo x je písmeno řídicího znaku. | \cC |
"\x0003" in "\x0003" (Ctrl-C) |
\unnnn |
Odpovídá znaku Unicode pomocí šestnáctkové reprezentace (přesně čtyři číslice, jak je reprezentováno nnnn). | \w\u0020\w |
"a b", "c d" v "a bc d" |
\ |
V případě, že následuje znak, který není rozpoznán jako řídicí znak v této a dalších tabulkách v tomto tématu, odpovídá tomuto znaku. Například je \* stejný jako a je stejný jako \x2A \. \x2E . To modulu regulárních výrazů umožňuje jednoznačně rozznačit prvky jazyka (například nebo ?) a znakové * literály (reprezentované \* nebo \? ). |
\d+[\+-x\*]\d+ |
"2+2" a "3*9" v "(2+2) * 3*9" |
Třídy znaků
Třída znaků odpovídá jakémukoli znaku z množiny znaků. Třídy znaků obsahují prvky jazyka uvedené v následující tabulce. Další informace najdete v tématu Třídy znaků.
| Třída znaků | Popis | Vzor | Shody |
|---|---|---|---|
[character_group ] |
Odpovídá libovolnému jednomu znaku v character_group. Ve výchozím nastavení shoda rozlišuje velká a malá písmena. | [ae] |
"a" v "gray""a", "e" v "lane" |
[^character_group ] |
Negace: Odpovídá libovolnému jednomu znaku, který není v character_group. Ve výchozím nastavení se v character_group rozlišují malá a velká písmena. | [^aei] |
"r", "g" , "n" v "reign" |
[first (první) - last (poslední) ] |
Rozsah znaků: Odpovídá libovolnému jednomu znaku v rozsahu od prvního do posledního znaku. | [A-Z] |
"A", "B" v "AB123" |
. |
Zástupný znak: Odpovídá jakémukoli jednomu znaku s výjimkou \n. Shoda se znakem tečky literálu (. nebo \u002E ), před ním musí být řídicí znak ( \. ). |
a.e |
"ave" v "nave""ate" v "water" |
\p{name (název) } |
Odpovídá libovolnému jednomu znaku v obecné kategorii Sady Unicode nebo pojmenovanému bloku určenému názvem. | \p{Lu}\p{IsCyrillic} |
"C", "L" v "City Lights""Д", "Ж" v "ДЖem" |
\P{name (název) } |
Odpovídá jednomu znaku, který není v obecné kategorii Sady Unicode nebo pojmenovaném bloku určeném názvem. | \P{Lu}\P{IsCyrillic} |
"i", "t" , "y" v "City""e", "m" v "ДЖem" |
\w |
Odpovídá jakémukoli znaku slova. | \w |
"I", "D" "A" , , , "1" "3" v "ID A1.3" |
\W |
Odpovídá jakémukoli mimoslovnímu znaku. | \W |
" ", "." v "ID A1.3" |
\s |
Odpovídá jakémukoli prázdnému znaku. | \w\s |
"D " v "ID A1.3" |
\S |
Odpovídá jakémukoli neprázdnému znaku. | \s\S |
" _" v "int __ctr" |
\d |
Odpovídá jakékoli desítkové číslici. | \d |
"4" v "4 = IV" |
\D |
Odpovídá jakémukoli znaku kromě desítkové číslice. | \D |
" ", "=" " " , , , "I" "V" v "4 = IV" |
Kotvy
Kotvy neboli atomické kontrolní výrazy s nulovou šířkou způsobí, že porovnávání je úspěšné nebo neúspěšné v závislosti na aktuální pozici v řetězci, ale nezpůsobí, aby nástroj postupoval dále v řetězci nebo spotřebovával znaky. Metaznaky uvedené v následující tabulce jsou kotvy. Další informace naleznete v tématu kotvy.
| Kontrolní výraz | Popis | Vzor | Shody |
|---|---|---|---|
^ |
Ve výchozím nastavení musí shoda začít na začátku řetězce; v víceřádkovém režimu musí začít na začátku řádku. | ^\d{3} |
"901" v "901-333-" |
$ |
Ve výchozím nastavení se shoda musí vyskytovat na konci řetězce nebo před koncem \n řetězce; v víceřádkovém režimu se musí vyskytovat před koncem řádku nebo před \n koncem řádku. |
-\d{3}$ |
"-333" v "-901-333" |
\A |
Ke shodě musí dojít na začátku řetězce. | \A\d{3} |
"901" v "901-333-" |
\Z |
Ke shodě musí dojít na konci řetězce nebo před \n na konci řetězce. |
-\d{3}\Z |
"-333" v "-901-333" |
\z |
Ke shodě musí dojít na konci řetězce. | -\d{3}\z |
"-333" v "-901-333" |
\G |
Ke shodě musí dojít v místě, kde byla ukončena předchozí shoda. | \G\(\d\) |
"(1)", "(3)" ,, "(5)" v "(1)(3)(5)[7](9)" |
\b |
Shoda se musí vyskytovat na hranici mezi \w znakem (alfanumerický) a \W (nealfanumerický) znak. |
\b\w+\s\w+\b |
"them theme", "them them" v "them theme them them" |
\B |
Shoda se nesmí vyskytovat na \b hranici. |
\Bend\w*\b |
"ends", "ender" v "end sends endure lender" |
Seskupovací konstrukce
Seskupovací konstrukce vymezují dílčí výrazy regulárních výrazů a obvykle zachytávají podřetězce vstupního řetězce. Seskupovací konstrukce obsahují prvky jazyka uvedené v následující tabulce. Další informace naleznete v tématu seskupovací konstrukce.
| Seskupovací konstrukce | Popis | Vzor | Shody |
|---|---|---|---|
(dílčí výraz ) |
Zachycuje porovnané dílčí výrazy a přiřazuje jim řadové číslovky od jedné. | (\w)\1 |
"ee" v "deep" |
(?<název > dílčí výraz )nebo (?'název ' dílčí výraz ) |
Zachycuje porovnaný dílčí výraz do pojmenované skupiny. | (?<double>\w)\k<double> |
"ee" v "deep" |
(?<název1 - název2 > dílčí výraz ) nebo (?'název1 - název2 ' dílčí výraz ) |
Určuje definici vyrovnávací skupiny. Další informace naleznete v části "definice vyrovnávací skupiny" v tématu seskupovací konstrukce. | (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ |
"((1-3)*(3-1))" v "3+2^((1-3)*(3-1))" |
(?:dílčí výraz ) |
Definuje skupinu bez zachytávání. | Write(?:Line)? |
"WriteLine" v "Console.WriteLine()""Write" v "Console.Write(value)" |
(?imnsx-imnsx:dílčí výraz ) |
Použije nebo zakáže zadané možnosti v rámci dílčího výrazu. Další informace najdete v tématu Možnosti regulárních výrazů. | A\d{2}(?i:\w+)\b |
"A12xl", "A12XL" v "A12xl A12XL a12xl" |
(?=dílčí výraz ) |
Kontrolní výraz pozitivního dopředného vyhledávání s nulovou šířkou. | \b\w+\b(?=.+and.+) |
"cats", "dogs"dovnitř "cats, dogs and some mice." |
(?!dílčí výraz ) |
Kontrolní výraz negativního dopředného vyhledávání s nulovou šířkou. | \b\w+\b(?!.+and.+) |
"and", "some", "mice"dovnitř "cats, dogs and some mice." |
(?<=dílčí výraz ) |
Kontrolní výraz pozitivního zpětného vyhledávání s nulovou šířkou. | \b\w+\b(?<=.+and.+)——————————— \b\w+\b(?<=.+and.*) |
"some", "mice"dovnitř "cats, dogs and some mice."———————————— "and", "some", "mice"dovnitř "cats, dogs and some mice." |
(?<!dílčí výraz ) |
Kontrolní výraz negativního zpětného vyhledávání s nulovou šířkou. | \b\w+\b(?<!.+and.+)——————————— \b\w+\b(?<!.+and.*) |
"cats", "dogs", "and"dovnitř "cats, dogs and some mice."———————————— "cats", "dogs"dovnitř "cats, dogs and some mice." |
(?>dílčí výraz ) |
Skupina atomie. | (?>a|ab)c |
"ac" pro"ac"nic v "abc" |
Lookarounds na první pohled
Když modul regulárních výrazů dosáhne výrazu lookaround, převezme podřetězec, který se dostane z aktuální pozice ke spuštění (zpětnému vyhledávání) nebo ukončení (dopředného) původního řetězce, a poté se spustí Regex.IsMatch na tomto podřetězu pomocí vzoru lookaround. Výsledek tohoto dílčího výrazu se pak určí tak, že se jedná o pozitivní nebo negativní kontrolní výraz.
| Lookaround | Name | Funkce |
|---|---|---|
(?=check) |
Pozitivní dopředného vyhledávání | Vyhodnotí, že co bezprostředně následuje za aktuální pozicí v řetězci je "check". |
(?<=check) |
Pozitivní zpětné vyhledávání | Vyhodnotí, že co bezprostředně předchází aktuální pozici v řetězci, je "check". |
(?!check) |
Negativní dopředného vyhledávání | Vyhodnotí, že co bezprostředně následuje za aktuální pozicí v řetězci není "check". |
(?<!check) |
Negativní zpětné vyhledávání | Vyhodnotí, že co bezprostředně předchází aktuální pozici v řetězci není "check". |
Až budou atomické skupiny shodné, znovu se znovu vyhodnotí, a to ani v případě, že zbývající část vzoru selhala kvůli shodě. To může významně zlepšit výkon, pokud k kvantifikátorům dochází v rámci atomické skupiny nebo zbytku vzoru.
Kvantifikátory
Kvantifikátor určuje, kolik instancí předchozího prvku (kterým může být znak, skupina nebo třída znaků) musí být přítomných ve vstupním řetězci, aby došlo ke shodě. Kvantifikátory zahrnují prvky jazyka uvedené v následující tabulce. Další informace najdete v tématu kvantifikátory.
| Kvantifikátor | Popis | Vzor | Shody |
|---|---|---|---|
* |
Porovná předchozí prvek nulakrát nebo vícekrát. | \d*\.\d |
".0", "19.9", "219.9" |
+ |
Porovná předchozí prvek jednou nebo vícekrát. | "be+" |
"bee" v "been" , "be" v "bent" |
? |
Porovná předchozí prvek nulakrát nebo jedenkrát. | "rai?n" |
"ran", "rain" |
{n } |
Porovná předchozí prvek přesně n krát. | ",\d{3}" |
",043" v "1,043.6" , ",876" , ",543" a ",210" v "9,876,543,210" |
{n ,} |
Odpovídá předchozímu prvku alespoň nkrát. | "\d{2,}" |
"166", "29", "1930" |
{n , m } |
Odpovídá předchozímu prvku alespoň nkrát, ale ne více než m krát. | "\d{3,5}" |
"166", "17668""19302" v "193024" |
*? |
Porovná předchozí prvek nulakrát nebo vícekrát, ale s co nejmenším možným počtem opakování. | \d*?\.\d |
".0", "19.9", "219.9" |
+? |
Porovná předchozí prvek jednou nebo vícekrát, ale s co nejmenším možným počtem opakování. | "be+?" |
"be" v "been" , "be" v "bent" |
?? |
Porovná předchozí prvek nulakrát nebo jedenkrát, ale s co nejmenším možným počtem opakování. | "rai??n" |
"ran", "rain" |
{n }? |
Odpovídá předchozímu prvku přesně nkrát. | ",\d{3}?" |
",043" v "1,043.6" , , a ",876" ",543" ",210" v "9,876,543,210" |
{n ,}? |
Odpovídá předchozímu prvku alespoň nkrát, ale co nejméněkrát. | "\d{2,}?" |
"166", "29", "1930" |
{n , m }? |
Odpovídá předchozímu prvku mezi n a m časy, ale co možná nejvícekrát. | "\d{3,5}?" |
"166", "17668""193", "024" v "193024" |
Konstrukce zpětných odkazů
Zpětné odkazy umožňují dříve porovnaným dílčím výrazům, aby byly identifikovány následně ve stejném pořadí v daném regulárním výrazu. Následující tabulka uvádí konstrukce zpětného odkazování podporované regulárními výrazy v .NET. Další informace najdete v tématu Konstrukce zpětných odkazů.
| Konstrukce zpětných odkazů | Popis | Vzor | Shody |
|---|---|---|---|
\číslo |
Zpětný odkaz. Odpovídá hodnotě číslovaného dílčího výrazu. | (\w)\1 |
"ee" v "seek" |
\k<name (název) > |
Pojmenovaný zpětný odkaz. Odpovídá hodnotě číslovaného výrazu. | (?<char>\w)\k<char> |
"ee" v "seek" |
Konstrukce alternace
Konstrukce alternace upravují regulární výraz, aby došlo ke shodě typu buď/anebo. Tyto konstrukce obsahují prvky jazyka uvedené v následující tabulce. Další informace najdete v tématu Konstrukce alternace.
| Konstrukce alternace | Popis | Vzor | Shody |
|---|---|---|---|
| |
Odpovídá jednomu prvku oddělenému znakem svislého pruhu ( | ). |
th(e|is|at) |
"the", "this" v "this is the day." |
(?(výraz ) ano | ne ) |
Odpovídá ano, pokud vzor regulárního výrazu určený výrazem odpovídá. v opačném případě odpovídá nepovinné žádné části. Výraz je interpretován jako kontrolní výraz s nulovou šířkou. | (?(A)A\d{2}\b|\b\d{3}\b) |
"A10", "910" v "A10 C103 910" |
(?(name (název) ) ano | ne ) |
Odpovídá ano, pokud název, pojmenovaná nebo očíslovaná zachytávající skupina, má shodu. V opačném případě odpovídá nepovinné žádné. | (?<quoted>")?(?(quoted).+?"|\S+\s) |
"Dogs.jpg ", "\"Yiska playing.jpg\"" v "Dogs.jpg \"Yiska playing.jpg\"" |
Náhrady
Náhrady jsou prvky jazyka regulárních výrazů, které jsou podporovány ve vzorech pro nahrazení. Další informace najdete v tématu Substituce. Metaznaky uvedené v následující tabulce jsou atomické kontrolní výrazy s nulovou šířkou.
| Znak | Description | Vzor | Vzor pro nahrazování | Vstupní řetězec | Výsledný řetězec |
|---|---|---|---|---|---|
$číslo |
Nahradí podřetězec odpovídající číslu skupiny. | \b(\w+)(\s)(\w+)\b |
$3$2$1 |
"one two" |
"two one" |
${name (název) } |
Nahradí podřetězec odpovídající pojmenovanému názvu skupiny. | \b(?<word1>\w+)(\s)(?<word2>\w+)\b |
${word2} ${word1} |
"one two" |
"two one" |
$$ |
Nahradí literál "$". | \b(\d+)\s?USD |
$$$1 |
"103 USD" |
"$103" |
$& |
Nahradí kopii celé shody. | \$?\d*\.?\d+ |
**$&** |
"$1.30" |
"**$1.30**" |
$` |
Nahradí celý text vstupního řetězce před shodou. | B+ |
$` |
"AABBCC" |
"AAAACC" |
$' |
Nahradí celý text vstupního řetězce za shodou. | B+ |
$' |
"AABBCC" |
"AACCCC" |
$+ |
Nahradí poslední skupinu, která byla zachycena. | B+(C+) |
$+ |
"AABBCCDD" |
"AACCDD" |
$_ |
Nahradí celý vstupní řetězec. | B+ |
$_ |
"AABBCC" |
"AAAABBCCCC" |
Možnosti regulárních výrazů
Můžete zadat možnosti, které řídí způsob, jakým modul regulárních výrazů interpretuje vzor regulárního výrazu. Mnohé z těchto možností lze zadat buď jako vložené (ve vzoru regulárního výrazu), nebo jako jednu nebo RegexOptions více konstant. Tyto stručné referenční informace uvádí pouze vložené možnosti. Další informace o vloženém výrazu RegexOptions a možnostech najdete v článku Možnosti regulárního výrazu.
Vloženou možnost můžete zadat dvěma způsoby:
- Pomocí různého konstruktoru , kde znaménko minus (-) před možností nebo sadu možností
(?imnsx-imnsx)vypne tyto možnosti. Například zapne porovnávání bez rozlišování velkých a malých písmen ( ), vypne víceřádkové režimy ( ) a vypne nepojmenované zachytávání(?i-mn)iskupin (mn). Možnost se vztahuje na vzor regulárního výrazu od bodu, ve kterém je možnost definována, a platí buď až do konce vzoru nebo do bodu, ve kterém je možnost zrušena jiným konstruktorem. - Pomocí dílčího výrazu
(?imnsx-imnsx:konstruktoru seskupení), který definuje možnosti pouze pro zadanou skupinu.
Modul regulárních výrazů .NET podporuje následující vložené možnosti:
| Možnost | Popis | Vzor | Shody |
|---|---|---|---|
i |
Použije porovnávání, které nerozlišuje velká a malá písmena. | \b(?i)a(?-i)a\w+\b |
"aardvark", "aaaAuto" v "aardvark AAAuto aaaAuto Adam breakfast" |
m |
Použije víceřádkový režim. ^ a odpovídají začátku a konci řádku místo začátku a konce $ řetězce. |
Příklad najdete v části "Režim víceřádku" v tématu Možnosti regulárního výrazu. | |
n |
Nezachytí nepojmenované skupiny. | Příklad najdete v části "Pouze explicitní zachycení" v tématu Možnosti regulárního výrazu. | |
s |
Použije jednořádkový režim. | Příklad najdete v části "Režim s jedním řádkovém kódem" v tématu Možnosti regulárního výrazu. | |
x |
Ignoruje prázdný znak bez řídicího znaku ve vzoru regulárního výrazu. | \b(?x) \d+ \s \w+ |
"1 aardvark", "2 cats" v "1 aardvark 2 cats IV centurions" |
Různé konstrukce
Různé konstrukce buď upraví vzor regulárního výrazu, nebo o tomto vzoru poskytnou informace. Následující tabulka uvádí různé konstruktory podporované platformou .NET. Další informace najdete v tématu Různé konstrukce.
| Konstrukce | Definice | Příklad |
|---|---|---|
(?imnsx-imnsx) |
Nastaví nebo zakáže možnosti, jako je například nerozlišování velkých a malých písmen uprostřed vzoru. Další informace najdete v tématu Možnosti regulárních výrazů. | \bA(?i)b\w+\b shody "ABA" , "Able" v "ABA Able Act" |
(?#Komentář ) |
Vložený komentář. Komentář končí první pravou závorkou. | \bA(?#Matches words starting with A)\w+\b |
# [do konce řádku] |
Komentář x-mode. Komentář začíná na neřídicím znaku # a pokračuje na konec řádku. |
(?x)\bA\w+\b#Matches words starting with A |