Prvky jazyka regulárních výrazů
Regulární výraz je vzorek, který modul regulárních výrazů porovnává se vstupním textem. Vzorek se skládá z jednoho nebo více literálů, operátorů nebo konstrukcí. Stručný úvod naleznete zde: .NET Framework regulární výrazy.
Každý oddíl v tomto přehledu obsahuje určitou kategorii znaků, operátorů a konstrukcí, které je možné použít k definování regulárních výrazů:
Řídící sekvence znaků
Třídy znaků
Kotvy
Seskupovací konstrukce
Kvantifikátory
Konstrukce zpětných odkazů
Alternativní konstrukce
Náhrady
Různé konstrukce
Řídící sekvence znaků
Znak zpětného lomítka (\) v regulárním výraz indikuje, že je znak, který následuje 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 naleznete v tématu Řídící znaky.
Řídící znak |
Popis |
Maska |
Odpovídá |
---|---|---|---|
\a |
Odpovídá znaku bell \u0007. |
\a |
"\u0007" v Chyba! + '\u0007' |
\b |
Ve třídě znaků, odpovídá backspace, \u0008. |
[\b]{3,} |
"\b\b\b\b" v "\b\b\b\b" |
\t |
Odpovídá znaku tab, \u0009. |
(\w+)\t |
"item1\t", "item2\t" v "item1\titem2\t" |
\r |
Odpovídá znaku pro návrat na začátek řádku \u000D. (\r není ekvivalentní se znakem \n.) |
\r\n(\w+) |
"\r\nThese" v "\r\nThese are\ntwo lines." |
\v |
Odpovídá znaku vertical tab \u000B. |
[\v]{2,} |
"\v\v\v" v "\v\v\v" |
\f |
Odpovídá posunu stránky \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á znaku escape \u001B. |
\e |
"\x001B" v "\x001B" |
\nnn |
Používá osmičkové vyjádření k určení znaku (nnn obsahuje až tři číslice). |
\w\040\w |
"a b", "c d" v "a bc d" |
\xmm |
Používá šestnáctkové vyjádření k určení znaku (nn obsahuje přesně dvě číslice). |
\w\x20\w |
"a b", "c d" v "a bc d" |
\cX \cX |
Odpovídá řídicí znak ASCII, který je určen x nebo x, kde x nebo x je písmeno řídicí znak. |
\cC |
"\x0003" v "\x0003" (Ctrl-C) |
\unnnn |
Tomuto řetězci odpovídá znak Unicode pomocí šestnáctkový zápis (přesně čtyři číslice představovaných nnnn). |
\w\u0020\w |
"a b", "c d" v "a bc d" |
\ |
V případě, že následuje znak, který není rozpoznán jako řídící znak v této a dalších tabulkách v tomto tématu, je porovnáván tento znak. Například \* je stejné jako \x2A. To umožňuje modulu regulárních výrazů rozpoznat prvky jazyka (například * nebo ?) a znak literálů (představované \* nebo \?). |
\d+[\+-x\*]\d+\d+[\+-x\*\d+ |
"2+2" and "3*9" in "(2+2) * 3*9" |
Zpět na začátek
Třídy znaků
Třída znaků odpovídá jakémukoli znaku ze znakové sady. Třídy znaků obsahují prvky jazyka uvedené v následující tabulce. Další informace naleznete v tématu Třídy znaků.
Třída znaků |
Popis |
Maska |
Odpovídá |
---|---|---|---|
[skupina znaků] |
Odpovídá jednomu libovolnému znaku v character_group. Ve výchozím nastavení porovnávání rozlišuje velká a malá písmena. |
[ae] |
"a" v "gray" "a", "e" v "lane" |
[^skupina znaků] |
Negace: Odpovídá jakémukoli jednomu znaku, který není v character_group. Ve výchozím nastavení znaky v character_group rozlišují velká a malá písmena. |
[^aei] |
"r", "g", "n" v "reign" |
[first-last] |
Rozsah znaků: Odpovídá libovolnému jednomu znaku v rozsahu od first do last. |
[A-Z] |
"A", "B" v "AB123" |
. |
Zástupný znak: Odpovídá jakémukoli jednotlivému znaku kromě \n. |
a.e |
"ave" v "nave" "ate" v "water" |
\p{název} |
Odpovídá libovolnému jednomu znaku v obecné kategorii Unicode nebo pojmenovaném bloku určeném pomocí name. |
\p{Lu} \p{IsCyrillic} |
"C", "L" v "City Lights" "Д", "Ж" v "ДЖem" |
\P{název} |
Odpovídá libovolnému jednomu znaku, který není v obecné kategorii Unicode nebo pojmenovaném bloku určeném pomocí name. |
\P{Lu} \P{IsCyrillic} |
"i", "t", "y" v "City" "e", "m" v "ДЖem" |
\w |
Odpovídá libovolnému znaku slova. |
\w |
"I", "D", "A", "1", "3" v "ID A1.3" |
\W |
Odpovídá libovolnému znaku, který není znakem slova. |
\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á libovolné číslici, která není desítková. |
\D |
" ", "=", " ", "I", "V" in "4 = IV" |
Zpět na začátek
Kotvy
Kotvy nebo atomické výrazy s nulovou šířkou způsobí, že porovnávání je úspěšné nebo selže v závislosti na aktuální pozici v řetězci, ale nezpůsobí, aby modul regulárních výrazů přešel 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 v regulárních výrazech.
Assertion |
Popis |
Maska |
Odpovídá |
---|---|---|---|
^ |
Porovnávání musí začít na začátku řetězce nebo řádku. |
^\d{3} |
"901-" v "901-333-" |
$ |
Ke shodě musí dojít na konci řetězce nebo před \n na konci řetězce nebo řádku. |
-\d{3}$ |
"-333" v "-901-333" |
\A |
Shoda se musí objevit 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 |
Shoda se musí vyskytovat 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í objevit na hranici mezi \w (alfanumerický) a \W (nealfanumerické) znak. |
\b\w+\s\w+\b |
"them them" v "them theme them them" |
\B |
Ke shodě musí dojít na hranici \b. |
\Bend\w*\b |
"ends", "ender" v "end sends endure lender" |
Zpět na začátek
Seskupovací konstrukce
Seskupující konstrukce vymezují dílčí výrazy regulárních výrazů a typicky zachytávají podřetězce vstupního řetězce. Seskupující konstrukce obsahují jazykové prvky uvedené v následující tabulce. Další informace naleznete v tématu Seskupovací konstrukce.
Seskupující konstrukce |
Popis |
Maska |
Odpovídá |
---|---|---|---|
(dílčím) |
Zachycuje porovnané dílčí výrazy a přiřadí jim ordinální čísla od nuly. |
(\w)\1 |
"ee" v "deep" |
(?<name>.subexpression) |
Zachycuje porovnaný dílčí výraz do pojmenované skupiny. |
(?<double>\w)\k<double> |
"ee" v "deep" |
(?<name1-name2> subexpression) |
Definuje definici vyrovnávajícího seskupení. Další informace naleznete v tématu "Vyrovnávání definici skupiny" sekce v Seskupovací konstrukce. |
(((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ |
"((1-3)*(3-1))" v "3+2^((1-3)*(3-1))" |
(?: dílčím) |
Definuje nezachycující seskupení. |
Write(?:Line)? |
"WriteLine" v "Console.WriteLine()" |
(?imnsx-imnsx: dílčím) |
Použije nebo zakáže zadané možnosti v rámci subexpression. Další informace naleznete v tématu Možnosti regulárních výrazů. |
A\d{2}(?i:\w+)\b |
"A12xl", "A12XL" v "A12xl A12XL a12xl" |
(?= dílčím) |
Výraz pozitivního dopředného vyhledávání s nulovou šířkou |
\w+(?=\.) |
"is", "ran", a "out" v "He is. The dog ran. The sun is out." |
(?! dílčím) |
Výraz negativního dopředného vyhledávání s nulovou šířkou |
\b(?!un)\w+\b |
"sure", "used" v "unsure sure unity used" |
(?<= dílčím) |
Výraz pozitivního zpětného vyhledávání s nulovou šířkou. |
(?<=19)\d{2}\b |
"99", "50", "05" v "1851 1999 1950 1905 2003" |
(?<! dílčím) |
Výraz negativního zpětného vyhledávání s nulovou šířkou. |
(?<!19)\d{2}\b |
"51", "03" in "1851 1999 1950 1905 2003" |
(?> dílčím) |
Podvýrazy bez mechanismu navrácení (greedy). |
[13579](?>A+B+) |
"1ABB", "3ABB", a "5AB" v "1ABB 3ABBC 5AB 5AC" |
Zpět na začátek
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řítomny ve vstupním řetězci, aby došlo ke shodě. Kvantifikátory zahrnují jazykové prvky uvedené v následující tabulce. Další informace naleznete v tématu Kvantifikátory.
Kvantifikátor |
Popis |
Maska |
Odpovídá |
---|---|---|---|
* |
Porovná předchozí prvek nula 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 nula 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,} |
Porovná předchozí prvek nejméně n krát. |
"\d{2,}" |
"166", "29", "1930" |
{n,m} |
Porovná předchozí prvek nejméně n krát, ale ne více než m krát. |
"\d{3,5}" |
"166", "17668" "19302" v "193024" |
*? |
Porovná předchozí prvek nula nebo více krát, ale co nejméněkrát je to možné. |
\d*? \. \d |
".0", "19.9", "219.9" |
+? |
Porovná předchozí prvek jednou nebo více krát, ale co nejméněkrát je to možné. |
"be+?" |
"být" "byl" "být" v "ohnutá" |
?? |
Porovná předchozí prvek nula nebo jedenkrát, ale co nejméněkrát je to možné. |
"rai?? n" |
"ran", "rain" |
{n}? |
Porovná předcházející prvek přesně n krát. |
",\d{3}?" |
",043" v "1,043.6", ",876", ",543", a ",210" v "9,876,543,210" |
{n,}? |
Porovná předchozí prvek nejméně n krát, ale nejméněkrát jak je to možné. |
"\d{2,}?" |
"166", "29", "1930" |
{n,m}? |
Porovná předchozí prvek n krát až m krát, ale nejméněkrát jak je to možné. |
"\d{3,5}?" |
"166", "17668" "193", "024" v "193024" |
Zpět na začátek
Konstrukce zpětných odkazů
Zpětné odkazy umožňují dříve porovnaným dílčím výrazům, aby byly identifikovány ve stejném pořadí v daném regulárním výrazu. Následující tabulka uvádí konstrukce zpětných odkazů, podporované regulárními výrazy v rozhraní .NET Framework. Další informace naleznete v tématu Konstrukce zpětných odkazů.
Konstrukce zpětných odkazů |
Popis |
Maska |
Odpovídá |
---|---|---|---|
\číslo |
Zpětný odkaz. Odpovídá hodnotě číslovaného dílčího výrazu. |
(\w)\1 |
"ee" v "seek" |
\k<název> |
Pojmenovaný zpětný odkaz. Odpovídá hodnotě číslovaného výrazu. |
(?<char>\w)\k<char> |
"ee" v "seek" |
Zpět na začátek
Konstrukce alternace
Konstrukce alternace upravují regulární výrazy pro umožnění porovnávání. Tyto konstrukce obsahují jazykové prvky uvedené v následující tabulce. Další informace naleznete v tématu Konstrukce alternace.
Alternativní konstrukce |
Popis |
Maska |
Odpovídá |
---|---|---|---|
| |
Odpovídá jakémukoli jednomu prvku oddělenému znakem svislé čáry (|). |
th(e|is|at) |
"the", "this" v "this is the day. " |
(?(expression)yes|Ne) |
Odpovídá yes pokud odpovídá expression. V jiném případě odpovídá volitelné části no. expression je interpretován jako výraz nulové šířky. |
(?(A)A\d{2}\b|\b\d{3}\b) |
"A10", "910" v "A10 C103 910" |
(?(name)yes|Ne) |
Odpovídá yes pokud pojmenované zachycení name má shodu. V jiném případě odpovídá volitelnému no. |
(?<quoted>")?(?(quoted).+?"|\S+\s) |
Dogs.jpg, "Yiska playing.jpg" v "Dogs.jpg "Yiska playing.jpg"" |
Zpět na začátek
Náhrady
Náhrady jsou prvky jazyka regulárních výrazů, které jsou podporovány ve vzorcích pro nahrazení. Další informace naleznete v tématu Substituce. Metaznaky uvedené v následující tabulce jsou atomické výrazy s nulovou šířkou.
Znak |
Popis |
Maska |
Vzorek pro nahrazování |
Vstupní řetězec |
Výsledný řetězec |
---|---|---|---|---|---|
$číslo |
Nahradí podřetězec odpovídající skupině number. |
\b(\w+)(\s)(\w+)\b |
$3$2$1 |
"one two" |
"two one" |
${název} |
Nahradí podřetězec odpovídající pojmenované skupině name. |
\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}) |
**$& |
"$1.30" |
"**$1.30**" |
$` |
Nahradí celý text vstupního řetězce před porovnáváním. |
B+ |
$` |
"AABBCC" |
"AAAACC" |
$' |
Nahradí celý text vstupního řetězce po porovnávání. |
B+ |
$' |
"AABBCC" |
"AACCCC" |
$+ |
Nahradí poslední skupinu, která byla zachycena. |
B+(C+) |
$+ |
"AABBCCDD" |
AACCDD |
$_ |
Nahradí celý vstupní řetězec. |
B+ |
$_ |
"AABBCC" |
"AAAABBCCCC" |
Zpět na začátek
Rozdílné konstrukce
Rozdílné konstrukce buď upraví vzorek regulárního výrazu nebo o něm poskytují informace. V následující tabulce jsou uvedeny různé konstrukce podporované rozhraním .NET Framework. Další informace naleznete v tématu Rozdílné konstrukce.
Konstrukce |
Definice |
Příklad |
---|---|---|
(?imnsx-imnsx) |
Nastaví nebo zakáže možnosti jako například nerozlišování velikosti písmen uprostřed vzorku. Další informace naleznete v tématu Možnosti regulárních výrazů. |
\bA(?i)b\w+\b odpovídá "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] |
X-mode komentáře. Komentář začíná znakem #, který je bez řídícího znaku a pokračuje až do konce řádku. |
(?x)\bA\w+\b#Matches words starting with A |
Zpět na začátek
Viz také
Odkaz
System.Text.RegularExpressions
Koncepty
.NET Framework regulární výrazy