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" |
\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" |
\c X\c x |
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) |
\u nnnn |
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" |
(?< 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í 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" v"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" |
(?( 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á 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í vypne tyto možnosti. 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 |