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é referenci obsahuje určitou 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, abyste je mohli snadno použít:

Řídicí znaky

Zpětný lomítko (\) v regulárním výrazu označuje, že znak, který následuje za ním, je 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 Ří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 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á 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 ří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 \x2A\. a je stejný jako \x2E. To umožňuje modulu regulárních výrazů nejednoznačné 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""n" v"reign"
[první poslední-] Rozsah znaků: Odpovídá jakémukoli jednomu 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 spárovat znak literálové 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á libovolnému 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 jedinému znaku, který není v obecné kategorii 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á libovolnému znaku slova. \w "I", "D", "A", "1", "3" v "ID A1.3"
\W Odpovídá libovolnému neslovně dané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 prázdnému znaku. \s\S " _" v "int __ctr"
\d Odpovídá libovolné desítkové číslici. \d "4" v "4 = IV"
\D Odpovídá libovolnému znaku jinému než desítkové číslici. \D " ", "=", " ", "I", "V" v "4 = IV"

Záložky

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 nacházet na konci řetězce nebo před \n koncem řetězce; v 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í 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 nebyla žádná předchozí shoda, na pozici v řetězci, kde začalo párování. \G\(\d\) "(1)", "(3)""(5)" v"(1)(3)(5)[7](9)"
\b Shoda musí nastat na hranici mezi znakem \w (alfanumerické) a \W (nephanumeric). \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 naleznete 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"
(?<subexpression name>)
nebo
(?'subexpression name')
Zachycuje porovnaný dílčí výraz do pojmenované skupiny. (?<double>\w)\k<double> "ee" v "deep"
(?<name1-name2>subexpression)
nebo
(?'name1-name2'subexpression)
Určuje definici vyrovnávací skupiny. Další informace najdete v části Definice skupiny vyrovnávání 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 naleznete 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"
in
"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"
in
"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"
in
"cats, dogs and some mice."
————————————
"and", , "some""mice"
in
"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"
in
"cats, dogs and some mice."
————————————
"cats", "dogs"
in
"cats, dogs and some mice."
(?>Podvýraz) Atomická skupina. '(?>a|ab)c "ac" In"ac"

nic v"abc"

Pohledové pohledy

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 potom se spustí Regex.IsMatch na 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 Název Funkce
(?=check) Pozitivní pohled Tvrdí, že to, co bezprostředně následuje za aktuální pozicí v řetězci, je "check"
(?<=check) Pozitivní pohled Tvrdí, že to, co bezprostředně předchází aktuální pozici v řetězci je "check"
(?!check) Negativní pohled Tvrdí, že to, co bezprostředně následuje za aktuální pozicí v řetězci, není "check"
(?<!check) Negativní vzhled Tvrdí, že to, co bezprostředně předchází aktuální pozici v řetězci, není "check"

Jakmile se shodují, atomické skupiny se znovu nevyhodnotí, ani když zbytek vzoru selže kvůli shody. To může výrazně zlepšit výkon, pokud kvantifikátory dochází 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 naleznete 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"v , "be" v "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" 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ícekrát 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 , "be" v "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" 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 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í konstruktory backreference podporované regulárními výrazy v .NET. Další informace naleznete v tématu Backreference Konstrukty.

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)
Porovná ano, pokud vzor regulárního výrazu určený výrazem odpovídá shodě. 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ými zachycenými skupinami, 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"
(?(name)yes|no)
nebo
(?(name)yes)
Odpovídá ano , pokud název, pojmenovaná nebo číslovaný zachycená skupina má shodu. V opačném případě odpovídá nepovinným 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 naleznete v tématu Nahrazení. Metaznaky uvedené v následující tabulce jsou atomické kontrolní výrazy s nulovou šířkou.

Znak Popis 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. Mnohé 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 naleznete v článku Možnosti regulárního výrazu.

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

  • Pomocí různé konstrukce(?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í malých a velkých písmen (i), vypne režim víceřádkového režimu (m) a vypne nezaznamenané 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í podvýrazu 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 Víceřádkový režim v možnostech regulárního výrazu.
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 velký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 neuskutečeném # místě a pokračuje na konci řádku. (?x)\bA\w+\b#Matches words starting with A

Viz také