Sdílet prostřednictvím


Použití regulárních výrazů ve Visual Studiu

Visual Studio používá .NET regulární výrazy k vyhledání a nahrazení textu.

Syntaxe regulárního výrazu

Následující tabulka obsahuje několik znaků regulárních výrazů, operátorů, konstrukcí a příkladů vzorů. Podrobnější referenční informace najdete v tématu jazyk regulárních výrazů.

Účel Výraz Příklad
Porovná libovolný jeden znak (s výjimkou konce řádku). Další informace naleznete v tématu Any character. . a.o odpovídá "aro" v "around" a "abo" v "about", ale nikoli "acro" v "across"
Porovná nula nebo více výskytů předchozího výrazu (odpovídá maximálnímu počtu znaků). Další informace naleznete v tématu Shoda nula nebo vícekrát. * a*r odpovídá "r" v "racku", "ar" v "ark" a "aar" v "aardvark"
Porovná libovolný znak nulakrát nebo vícekrát. .* c.*e odpovídá "cke" ve slově "racket", "comme" ve slově "comment" a "code" ve slově "code".
Porovná jeden nebo více výskytů předchozího výrazu (odpovídá co největšímu počtu znaků). Další informace naleznete v tématu Shoda jednou nebo vícekrát. + e+d odpovídá "eed" v "feeder" a "ed" v "faded"
Porovná libovolný znak jednou nebo vícekrát. .+ e.+e odpovídá "eede" v "krmítku", ale nenajde žádné shody v "krmivu"
Porovná nula nebo více výskytů předchozího výrazu (odpovídá co nejméně znakům). Další informace naleznete v tématu Shoda nula nebo vícekrát (líná shoda). *? \w*?d odpovídá "fad" a "ed" ve slově "faded", ale ne celému slovu "faded" kvůli líné shodě.
Najde jeden nebo více výskytů předchozího výrazu (s co nejmenším počtem znaků). Další informace naleznete v tématu Shoda jednou nebo vícekrát (líná shoda). +? e\w+? odpovídá "ee" v "asleep" a "ed" v "faded", ale nenajde žádné shody v "fade".
Ukotvěte řetězec shody k začátku řádku nebo řetězce ^ ^car odpovídá slovu "auto" pouze v okamžiku, kdy se zobrazí na začátku řádku.
Ukotvěte řetězec shody na konec řádku \r?$ car\r?$ se shoduje s "auto" pouze tehdy, když se objeví na konci řádku.
Ukotvěte řetězec shody na konci souboru $ car$ odpovídá "auto" pouze tehdy, když se objeví na konci souboru.
Odpovídá libovolnému jednomu znaku v sadě [abc] b[abc] odpovídá "ba", "bb" a "bc"
Odpovídající libovolný znak z rozsahu znaků [a-f] be[n-t] shody "bet" v "between", "ben" v "pod" a "bes" v "vedle", ale nenajde žádné shody v "níže"
Zachycení a implicitní číslování výrazu obsaženého v závorkách () ([a-z])X\1 odpovídá "aXa" a "bXb", ale ne "aXb". "\1" odkazuje na první skupinu výrazů "[a-z]". Další informace naleznete v tématu Zachycovací skupiny a vzorů nahrazení.
Zneplatnění zápasu (?! abc) real(?!ity) odpovídá slovu "reálné" ve slovech "reálný" a "opravdový", ale ne ve slově "realita". Také nalezne druhé "reálné" (ale ne první "reálné") v "realitareál".
Porovná libovolný znak, který není v dané sadě znaků. Pro více informací se podívejte na Skupina záporných znaků. [^abc] be[^n-t] odpovídá "bef" v "before", "beh" v "behind" a "bel" v "below", ale nenajde žádné shody v "beneath"
Vyberte buď výraz před symbolem, nebo výraz za ním. | (sponge|mud) bath odpovídá "mytí houbou" a "bahenní koupel"
Upravte znak následující za zpětným lomítkem \ \^ odpovídá znaku ^
Zadejte počet výskytů předchozího znaku nebo skupiny. Další informace naleznete v tématu Přesná shoda nkrát. {n}, kde n je počet výskytů x(ab){2}x odpovídá "xababx"
x(ab){2,3}x odpovídá "xababx" a "xabababx", ale ne "xababababx"
Shodující se text v kategorii Unicode. Další informace o třídách znaků Unicode naleznete v tématu Unicode Standard 15.0 Character Properties. \p{X}, kde "X" je číslo Unicode. \p{Lu} odpovídá "T" a "D" v "Thomas Doe"
Shoda s hranicemi slova \b (Mimo třídu znaků \b určuje hranici slova a uvnitř třídy znaků \b určuje backspace.) \bin se shoduje s "in" ve "vnitřní", ale nenajde žádné shody ve "pinto"
Načte konec řádku (to znamená návrat vozíku následovaný novým řádkem nebo pouze nový řádek). \r?\n End\r?\nBegin odpovídá "End" a "Begin" pouze tehdy, když "End" je poslední řetězec na řádku a "Begin" je první řetězec na dalším řádku.
Shoda s libovolným znakem v rámci slova \w a\wd odpovídá "add" a "a1d", ale ne "a d"
Najít libovolný bílý znak \s Public\sInterface odpovídá frázi "Veřejné rozhraní"
Porovná všechny desetinné číslice \d \d odpovídá hodnotě 4 a 0 v souboru wd40.

Příklad regulárního výrazu, který kombinuje některé operátory a konstrukce tak, aby odpovídaly šestnáctkovému číslu, je \b0[xX]([0-9a-fA-F]+)\b. Tento výraz odpovídá "0xc67f", ale ne "0xc67g".

Spropitné

Většina řádků v operačních systémech Windows končí na "\r\n" (návrat na začátek řádku následovaný novým řádkem). Tyto znaky nejsou viditelné, ale jsou přítomné v editoru a předané službě regulárních výrazů .NET. Při práci se soubory z webu nebo z operačního systému jiného systému než Windows nezapomeňte zohlednit možnost, že používají nový řádek pouze pro přerušení řádku.

Zachytávání skupin a vzorů nahrazení

Skupina zachycení označuje dílčí výraz regulárního výrazu a zachycuje podřetězce vstupního řetězce. Zachycené skupiny můžete použít v samotném regulárním výrazu (například k vyhledání opakovaného slova) nebo v náhradním vzoru. Podrobné informace naleznete v tématu Seskupování konstrukcí v regulárních výrazech.

Pokud chcete vytvořit číslovanou skupinu zachycení, uzavřete dílčí výraz do závorek v rámci vzoru regulárního výrazu. Úlovky se očíslují automaticky zleva doprava na základě pozice otevíracích závorek v regulárním výrazu. Pokud chcete získat přístup k zachycené skupině, zvažte následující příklady:

  • V rámciregulárního výrazu: Použijte \number. Například \1 v regulárním výrazu (\w+)\s\1 odkazuje na první skupinu zachycení (\w+).

  • V náhradním vzoru: Použijte $number. Například seskupený regulární výraz (\d)([a-z]) definuje dvě skupiny: první skupina obsahuje jednu desetinnou číslici a druhá skupina obsahuje jeden znak mezi a z. Výraz najde čtyři shody v následujícím řetězci: 1a 2b 3c 4d. Náhradní řetězec z$1 odkazuje pouze na první skupinu ($1) a převede řetězec na z1 z2 z3 z4.

Následující obrázek ukazuje regulární výraz (\w+)\s\1 a náhradní řetězec $1. Regulární výraz i vzor nahrazení odkazují na první skupinu zachycení, která je automaticky očíslována 1. Když zvolíte Nahradit všechny v dialogovém okně Rychlé nahrazení v sadě Visual Studio, budou z textu odebrána opakovaná slova.

snímek obrazovky Rychlé nahrazení, zobrazující číslovanou skupinu zachycení v sadě Visual Studio

Spropitné

V dialogovém okně Rychlé nahrazení nezapomeňte vybrat tlačítko Použít regulární výrazy nebo stiskněte Alt+E.

Pojmenované zachytávací skupiny

Místo toho, abyste se spoléhali na automatické číslování skupiny zachycení, můžete ji pojmenovat. Syntaxe pojmenované skupiny zachycení je (?<name>subexpression).

Pojmenované skupiny zachycení, jako jsou číslované skupiny zachycení, lze použít v rámci samotného regulárního výrazu nebo v náhradním vzoru. Pokud chcete získat přístup k pojmenované záchytné skupině, zvažte následující příklady:

  • V rámciregulárního výrazu: Použijte \k<name>. Například \k<repeated> v regulárním výrazu (?<repeated>\w+)\s\k<repeated> odkazuje na skupinu zachycení s názvem repeated a jejíž dílčí výraz je \w+.

  • V náhradním vzoru: Použijte ${name}. Například ${repeated}.

Následující obrázek ukazuje regulární výraz (?<repeated>\w+)\s\k<repeated> a náhradní řetězec ${repeated}. Regulární výraz i vzor nahrazení odkazují na skupinu zachycení s názvem repeated. Když zvolíte Nahradit všechny v dialogovém okně Rychlé nahrazení v sadě Visual Studio, budou z textu odebrána opakovaná slova.

snímek obrazovky Rychlého nahrazení znázorňující pojmenovanou zachycovací skupinu v sadě Visual Studio

Spropitné

Nezapomeňte vybrat tlačítko Použít regulární výrazy (nebo stiskněte Alt+E) v dialogovém okně Rychlé nahrazení.

Pro další informace o pojmenovaných zachycovacích skupinách viz Pojmenované odpovídající dílčí výrazy. Další informace o regulárních výrazech, které se používají v náhradních vzorech, naleznete v tématu Nahrazení v regulárních výrazech.

Příklady

Vzor Popis
int ([_A-Za-z][_A-Za-z0-9]*) Porovnejte jednotlivé celočíselné definice. Identifikátory začínají jedním velkým nebo malým písmenem, za kterým následuje nula nebo více (označených *) písmena nebo číslice. Identifikátor je zachycen pomocí vnějších závorek jako $1.
(private\|internal\|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ Porovná celočíselné deklarace jazyka C#, které jsou inicializovány na celočíselné literály, zachytávají různé části, včetně úrovně přístupu, modifikátorů, jako jsou const nebo static, identifikátor a definovaná hodnota. Všimněte si použití \s+ alespoň pro jeden prázdný znak nebo \s*, pokud může nebo nemusí dojít k prázdným znakům.
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) Porovnej počáteční čáru smyčky foreach. Literální závorky jsou uvozovány zpětným lomítkem (\). Různé skupiny jsou zachyceny jako $1, $2a $3 nezapsanými závorkami.
#define\s+([_A-Za-z][_A-Za-z0-9]*) Odpovídá definici #define (bez hodnoty, pokud existuje). Definovaný token je uložen v $1.
#include\s+["<](.*)[">] Shoda zahrnuje zdrojový soubor C++.