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 této stručné referenční příručky obsahuje konkrétní kategorii znaků, operátorů a konstruktorů, 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 snadnou referenci:

Řídicí znaky

Znak zpětného lomítka (\) v regulárním výrazu označuje, že znak, který ho následuje, je buď speciálním znakem (jak je znázorněno v následující tabulce), nebo by měl být interpretován doslovně. Další informace najdete v tématu Řídicí znaky.

Řídicí znak Description 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"
\xNn Používá šestnáctkové vyjádření k určení znaku (nn se skládá přesně ze dvou číslic). \w\x20\w "a b", "c d" v "a bc d"
\cX

\cX
Odpovídá řídicímu znaku ASCII určenému znakem 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 reprezentované 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 \* hodnota je stejná jako \x2Aa \. je stejná jako \x2E. To umožňuje modulu regulárních výrazů rozlišovat nejednoznačné 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ů Description Vzor Shody
[Character_group] Odpovídá jakémukoli jednotlivému 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: Porovná všechny jednotlivé znaky, které nejsou v character_group. Ve výchozím nastavení se u znaků v character_group rozlišují malá a velká písmena. [^aei] "r", "g", "n" v "reign"
[První-Poslední] Rozsah znaků: Odpovídá jakémukoli jednotlivému znaku v rozsahu od prvního do posledního. [A-Z] "A", "B" v "AB123"
. Zástupný znak: Odpovídá jakémukoli jednomu znaku s výjimkou \n.

Chcete-li znak tečky literálu (. nebo \u002E), musíte před něj zadat řídicí znak (\.).
a.e "ave" v "nave"

"ate" v "water"
\p{Jméno} Odpovídá jakémukoli jednotlivému znaku v obecné kategorii unicode nebo pojmenovaném bloku určeném názvem. \p{Lu}

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

"Д", "Ж" v "ДЖem"
\P{Jméno} Odpovídá jakémukoli jednotlivému znaku, který není v obecné kategorii sady Unicode nebo v pojmenovaném bloku zadaném názvem. \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"v "3""ID A1.3"
\W Odpovídá všem neslovovým znakům. \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 jinému než prá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 jinému znaku než desítkové číslici. \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 najdete v tématu Ukotvení.

Kontrolní výraz Description Vzor Shody
^ Ve výchozím nastavení musí shoda začínat na začátku řetězce; ve víceřádkovém režimu musí začínat na začátku řádku. ^\d{3} "901" v "901-333-"
$ Ve výchozím nastavení musí shoda nacházet na konci řetězce nebo před \n koncem řetězce; ve víceřádkovém režimu musí nastat 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 Shoda musí proběhnout na konci řetězce nebo před \n koncem ř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 musí nastat v bodě, kde předchozí shoda skončila, nebo pokud nebyla nalezena žádná předchozí shoda, na pozici v řetězci, kde porovnávání začalo. \G\(\d\) "(1)", "(3)", "(5)" v "(1)(3)(5)[7](9)"
\b Shoda musí být na hranici mezi \w (alfanumerickým) a \W (nefanumerickým) znakem. \b\w+\s\w+\b "them theme", "them them" v "them theme them them"
\B Shoda nesmí nacházet 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 najdete v tématu Seskupování konstruktorů.

Seskupovací konstrukce Description Vzor Shody
(Podvýraz) Zachycuje porovnané dílčí výrazy a přiřazuje jim řadové číslovky od jedné. (\w)\1 "ee" v "deep"
(?<Jméno>Podvýraz)
nebo
(?'Jméno'Podvýraz)
Zachycuje porovnaný dílčí výraz do pojmenované skupiny. (?<double>\w)\k<double> "ee" v "deep"
(?<název1-název2>Podvýraz)
nebo
(?'název1-název2'Podvýraz)
Určuje definici vyrovnávací skupiny. Další informace najdete v části "Definice skupiny vyrovnávání" v tématu Seskupovací konstrukce. (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ "((1-3)*(3-1))" v "3+2^((1-3)*(3-1))"
(?:Podvýraz) Definuje skupinu bez zachytávání. Write(?:Line)? "WriteLine" v "Console.WriteLine()"

"Write" v "Console.Write(value)"
(?imnsx-imnsx:Podvý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"
(?=Podvý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."
(?!Podvý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."
(?<=Podvý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."
(?<!Podvý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."
(?>Podvýraz) Atomická skupina. (?>a|ab)c "ac" In"ac"

nic v"abc"

Lookarounds v přehledu

Když modul regulárních výrazů dosáhne výrazu lookaround, vezme podřetězce, který se blíží z aktuální pozice na začátek (lookbehind) nebo konec (lookahead) původního řetězce a potom se spustí Regex.IsMatch na daném podřetězci pomocí vzoru lookaround. Úspěch výsledku tohoto dílčího výrazu se pak určuje podle toho, jestli se jedná o pozitivní nebo negativní kontrolní výraz.

Lookaround Name Funkce
(?=check) Pozitivní lookahead Potvrzuje, že to, co bezprostředně následuje za aktuální pozicí v řetězci, je "check".
(?<=check) Pozitivní lookbehind Potvrzuje, že to, co bezprostředně předchází aktuální pozici v řetězci, je "check".
(?!check) Negativní dopředné vyhledávání Potvrzuje, že to, co bezprostředně následuje za aktuální pozicí v řetězci, není "check".
(?<!check) Negativní lookbehind Ověří, že to, co bezprostředně předchází aktuální pozici v řetězci, není "check".

Jakmile se shodou, atomické skupiny se znovu nevyhodnocují, a to ani v případě, že zbytek vzoru kvůli shodě selže. To může výrazně zlepšit výkon, pokud se kvantifikátory vyskytují v atomické skupině nebo ve 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 Description Vzor Shody
* Porovná předchozí prvek nulakrát nebo vícekrát. a.*c "abcbc" v "abcbc"
+ 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?" "rai" v "rain"
{N} Odpovídá předchozímu prvku přesně nkrá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í. a.*?c "abc" v "abcbc"
+? 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??" "ra" v "rain"
{N}? Odpovídá předchozímu prvku 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 , ale co nejméněkrát. "\d{2,}?" "166", "29", "1930"
{N,M}? Odpovídá předchozímu prvku mezi n a m krát, ale co nejméněkrá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 obsahuje seznam konstruktorů backreference podporovaných regulárními výrazy v .NET. Další informace najdete v tématu Backreference – konstruktory.

Konstrukce zpětných odkazů Description Vzor Shody
\Číslo Zpětný odkaz. Odpovídá hodnotě číslovaného dílčího výrazu. (\w)\1 "ee" v "seek"
\k<Jméno> 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 Alternace konstruktorů.

Konstrukce alternace Description Vzor Shody
| Odpovídá libovolnému prvku oddělenému znakem svislého pruhu (|). th(e|is|at) "the", "this" v "this is the day."
(?(Výraz)Ano|Ne)
nebo
(?(Výraz)Ano)
Odpovídá ano, pokud se vzor regulárního výrazu určený výrazem shoduje. v opačném případě odpovídá nepovinné části. výraz se interpretuje jako kontrolní výraz s nulovou šířkou.

Pokud se chcete vyhnout nejednoznačnosti pojmenované nebo číslovné skupiny zachycení, můžete volitelně použít explicitní kontrolní výraz, například:
(?( (?=Výraz) )Ano|Ne)
(?(A)A\d{2}\b|\b\d{3}\b) "A10", "910" v "A10 C103 910"
(?(Jméno)Ano|Ne)
nebo
(?(Jméno)Ano)
Odpovídá ano, pokud název, pojmenovaná nebo číslová zachycená skupina, má shodu; v opačném případě odpovídá volitelnému ne. (?<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 Nahrazení. 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ěžce odpovídající číslu skupiny. \b(\w+)(\s)(\w+)\b $3$2$1 "one two" "two one"
${Jméno} Nahradí podřetěžce odpovídající názvu pojmenované 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. Mnoho z těchto možností je možné zadat buď jako vložené (ve vzoru regulárního výrazu), nebo jako jednu nebo více RegexOptions konstant. Tyto stručné referenční informace uvádí pouze vložené možnosti. Další informace o vložených a RegexOptions 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(?imnsx-imnsx), kde znaménko minus (-) před možností nebo sadou možností tyto možnosti vypne. Například (?i-mn) zapne porovnávání bez rozlišování velkých a malých písmen (i), vypne režim víceřádek (m) a vypne nepojmenované zachycení skupin (n). 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 seskupování konstruktoru(?imnsx-imnsx:, 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 namísto začátku a konce řetězce. Příklad najdete v části Víceřádkový režim v tématu Možnosti regulárního výrazu.
n Nezachytí nepojmenované skupiny. Příklad najdete v části "Pouze explicitní zachycení" v části Možnosti regulárního výrazu.
s Použije jednořádkový režim. Příklad najdete v části Režim jednoho řádku v části 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 obsahuje seznam různých konstruktorů podporovaných rozhraním .NET. Další informace najdete v tématu Různé konstruktory.

Konstrukce Definice Příklad
(?imnsx-imnsx) Nastaví nebo zakáže možnosti, jako je například rozlišování velkých a malých písmen uprostřed vzoru. Další informace najdete v tématu Možnosti regulárního výrazu. \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
# [na konec řádku] Komentář x-mode. Komentář začíná bez zobrazení # a pokračuje až na konec řádku. (?x)\bA\w+\b#Matches words starting with A

Viz také