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 tomto rychlém odkazu 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 snadné reference:

Řídicí znaky

Znak zpětného lomítka (\) v regulárním výrazu označuje, že znak, který následuje, 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 Řídicí znaky.

Ří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í ekvivalentní znaku newline, \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á z přesně dvou číslic). \w\x20\w "a b", "c d" v "a bc d"
\cX

\cX
Odpovídá znaku ASCII ovládacího prvku určeného znakem X nebo x, kde X nebo x je písmeno ovládacího prvku. \cC "\x0003" in "\x0003" (Ctrl-C)
\uNnnn Odpovídá znaku Unicode pomocí šestnáctkové reprezentace (přesně čtyři číslice reprezentované nnnnem). \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. Je například \* stejná jako \x2Aa \. je stejná jako \x2E. To umožňuje modulu regulárních výrazů neurčité prvky jazyka (například * nebo ?) a literály znaků (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 naleznete 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á jakémukoli jednomu znaku, který není v character_group. Ve výchozím nastavení se u znaků v character_group rozlišují malá a velká písmena. [^aei] "r", "g"v "n""reign"
[První-Poslední] Rozsah znaků: Odpovídá jakémukoli jednomu znaku v rozsahu od prvního po poslední. [A-Z] "A", "B" v "AB123"
. Zástupný znak: Odpovídá jakémukoli jednomu znaku s výjimkou \n.

Chcete-li shodovat znak literálového tečky (nebo \u002E), musíte před něj použít řídicí znak (\.).
a.e "ave" v "nave"

"ate" v "water"
\p{Jméno} Odpovídá jakémukoli jednomu 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 jednomu znaku, který není v obecné kategorii Unicode nebo pojmenovaném bloku určeném názvem. \P{Lu}

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

"e", "m" v "ДЖem"
\w Odpovídá libovolnému znaku slova. \w "I", , "D", "A", "3""1"v"ID A1.3"
\W Odpovídá libovolnému neslovnému znaku. \W " ", "." v "ID A1.3"
\s Odpovídá libovolnému znaku prázdného znaku. \w\s "D " v "ID A1.3"
\S Odpovídá libovolnému znaku, který není prázdný. \s\S " _" v "int __ctr"
\d Odpovídá libovolné desetinné číslici. \d "4" v "4 = IV"
\D Odpovídá libovolnému znaku jinému než desetinné číslici. \D " ", , "=", " ", "V""I"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 Popis 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 nastat 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í nastat 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 okamžiku, kdy předchozí shoda skončila, nebo pokud nedošlo k žádné předchozí shodě, na pozici v řetězci, kde se spustila shoda. \G\(\d\) "(1)", "(3)"v "(5)""(1)(3)(5)[7](9)"
\b Shoda musí nastat na hranici mezi znakem \w (alfanumerické) a \W (nonalphanumeric). \b\w+\s\w+\b "them theme", "them them" v "them theme them them"
\B Shoda nesmí nastat 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 Popis 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"
(?<name1-name2>Podvýraz)
nebo
(?'name1-name2'Podvýraz)
Určuje definici vyrovnávací skupiny. Další informace najdete v části Definice skupiny vyrovnávání zatížení v konstruktorech seskupení. (((?'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ího výrazu. 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 na první pohled

Když modul regulárních výrazů dosáhne výrazu lookaround, vezme podřetězce, který se dostane z aktuální pozice na začátek (lookbehind) nebo konec (lookahead) původního řetězce a pak 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, jestli se jedná o kladné nebo záporné kontrolní výrazy.

Lookaround Name Funkce
(?=check) Pozitivní pohled Ověří, že to, co se okamžitě řídí aktuální pozicí v řetězci, je "check"
(?<=check) Pozitivní lookbehind Ověří, že to, co bezprostředně předchází aktuální pozici v řetězci, je "check"
(?!check) Negativní vzhled Tvrdí, že to, co okamžitě následuje za aktuální pozicí v řetězci, není "kontrola"
(?<!check) Negativní vzhled Tvrdí, že to, co bezprostředně předchází aktuální pozici v řetězci, není "kontrola"

Jakmile se shodují, atomické skupiny se znovu nevyhodnotí, i když zbytek vzoru selže kvůli shody. To může výrazně zlepšit výkon v případě, že kvantifikátory dojde 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. a.*c "abcbc" v "abcbc"
+ Porovná předchozí prvek jednou nebo vícekrát. "be+" "bee"in , "be" in "been""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"in "1,043.6", , ",543"",876"a ",210" in"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"in , "be" in "been""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ě nkrát . ",\d{3}?" ",043"in "1,043.6", , ",543"",876"a ",210" in"9,876,543,210"
{N,}? Odpovídá předchozímu prvku alespoň nkrát , ale co nejvícekrát. "\d{2,}?" "166", "29", "1930"
{N,M}? Odpovídá předchozímu prvku mezi n a m krát, ale co 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 backreference podporované regulárními výrazy v .NET. Další informace najdete v tématu Konstruktor backreference.

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<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 naleznete v tématu Alternace konstruktorů.

Konstrukce alternace Popis Vzor Shody
| Odpovídá libovolnému prvku oddělenému svislým znakem pruhu (|). th(e|is|at) "the", "this" v "this is the day."
(?(Výraz)Ano|Ne)
nebo
(?(Výraz)Ano)
Odpovídá ano , pokud vzor regulárního výrazu určený podle shody výrazu ; v opačném případě odpovídá volitelné žádné části. výraz se interpretuje jako kontrolní výraz nulové šířky.

Abyste se vyhnuli nejednoznačnosti s pojmenovanou nebo číslovaným zachytáváním skupiny, můžete volitelně použít explicitní kontrolní výraz, například takto:
(?( (?=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 číslovaný 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ěděnou číslem skupiny. \b(\w+)(\s)(\w+)\b $3$2$1 "one two" "two one"
${Jméno} Nahradí podřetěděnou názvem 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í lze zadat buď vloženou (v 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ích výrazů.

Vloženou možnost můžete zadat dvěma způsoby:

  • Pomocí různé konstrukce, kde znaménko(?imnsx-imnsx) minus (-) před možností nebo sadou možností tyto možnosti vypne. (?i-mn) Například zapne porovnávání malých a malých písmen (i), vypne režim víceřádkového režimu (m) a vypne nezaznamenané snímky 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ísubexpressionu konstruktoru)(?imnsx-imnsx: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 $ porovná začátek a konec řádku místo začátku a konce řetězce. Příklad najdete v části Režim víceřádkového režimu v možnostech regulárních výrazů.
n Nezachytí nepojmenované skupiny. Příklad najdete v části Explicit Captures Only (Explicit Captures Only) v možnostech regulárního výrazu.
s Použije jednořádkový režim. Příklad najdete v části Režim s jedním řádkem v možnostech 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é konstrukce podporované rozhraním .NET. Další informace naleznete v tématu Různé konstrukce.

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

Viz také