Sdílet prostřednictvím


Použití regulárních výrazů v sadě Visual Studio

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

Syntaxe regulárního výrazu

Následující tabulka obsahuje několik znaků regulárního výrazu, operátorů, konstruktorů 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 Libovolný znak. . a.o odpovídá "aro" v "around" a "abo" v "about", ale ne "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 s nulou 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" v "racket", "comme" v "comment" a "code" in "code"
Porovná jeden nebo více výskytů předchozího výrazu (odpovídá co nejvíce znakům). Další informace naleznete v tématu Shoda jednou nebo vícekrát. + e+d odpovídá "eed" v "zásobníku" a "ed" ve výrazu "faded"
Porovná libovolný znak jednou nebo vícekrát. .+ e.+e odpovídá "eede" v "zásobníku", 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 Porovnávání nula nebo vícekrát (opožděná shoda). *? \w*?d odpovídá "fad" a "ed" v "faded", ale ne celé slovo "faded" kvůli opožděné shodě
Porovná jeden nebo více výskytů předchozího výrazu (odpovídá co nejméně znakům). Další informace naleznete v tématu Shoda jednou nebo vícekrát (opožděná shoda). +? e\w+? odpovídá "ee" v "spánku" a "ed" v "faded", ale nenajde žádné shody v "fade"
Ukotvení řetězce shody na začátek řádku nebo řetězce ^ ^car odpovídá slovu "auto" pouze v okamžiku, kdy se zobrazí na začátku řádku.
Ukotvení řetězce shody na konec řádku \r?$ car\r?$ odpovídá "auto" pouze tehdy, když se zobrazí na konci řádku.
Ukotvení řetězce shody na konec souboru $ car$ odpovídá "car" pouze tehdy, když se zobrazí na konci souboru.
Shoda s libovolným jedním znakem v sadě [abc] b[abc] odpovídá "ba", "bb" a "bc"
Shoda libovolného znaku v 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á hodnotě "aXa" a "bXb", ale ne "aXb". "\1" odkazuje na první skupinu výrazů "[a-z]". Další informace najdete v tématu Zachycení skupin a vzorů nahrazení.
Zneplatnění shody (?! abc) real(?!ity) odpovídá "skutečné" v "realitě" a "opravdu", ale ne v "realitě". Najde také druhou "reálnou" (ale ne první "reálnou") v "realitě".
Porovná libovolný znak, který není v dané sadě znaků. Další informace naleznete v tématu Skupina záporných znaků. [^abc] be[^n-t] shody "bef" v "before", "beh" v "behind" a "bel" v "below", ale nenajde žádné shody v "pod"
Porovná výraz před nebo výrazem za symbolem. | (sponge|mud) bath odpovídá "houbové koupeli" a "bahenní koupel"
Řídicí znak za zpětným lomítkem \ \^ odpovídá znaku ^
Zadejte počet výskytů předchozího znaku nebo skupiny. Další informace najdete v tématu Shoda přesně n krá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"
Porovná 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 hranicí slova \b (Mimo třídu \b znaků určuje hranici slova a uvnitř třídy \b znaků určuje backspace.) \bin odpovídá "in" v "inside", ale nenajde žádné shody v "pinto"
Porovná konec řádku (to znamená návrat na začátek řádku následovaný novým řádkem nebo pouze nový řádek). \r?\n End\r?\nBegin odpovídá hodnotě "End" a "Begin", pouze pokud je "End" posledním řetězcem na řádku a "Begin" je první řetězec na dalším řádku.
Shoda libovolného znaku slova \w a\wd odpovídá "add" a "a1d", ale ne "a d"
Shoda s libovolným prázdným znakem \s Public\sInterface odpovídá frázi "Veřejné rozhraní"
Shoda s libovolným znakem desítkové číslice \d \d odpovídá hodnotě "4" a "0" ve výrazu "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".

Tip

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í konstruktorů v regulárních výrazech.

Pokud chcete vytvořit číslovanou skupinu zachycení, obklopte dílčí výraz do závorek ve vzoru regulárního výrazu. Zachytávání se automaticky očísluje zleva doprava na základě pozice levý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:

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

  • V náhradním vzoru: Použijte $number. Seskupený regulární výraz (\d)([a-z]) například 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ž v sadě Visual Studio zvolíte Nahradit vše, odeberou se z textu opakovaná slova.

Snímek obrazovky rychlého nahrazení zobrazující číslovanou skupinu zachycení v sadě Visual Studio

Tip

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

Pojmenované skupiny zachycení

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 ke skupině pojmenovaných zachycení, zvažte následující příklady:

  • Uvnitř regulá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í, která je pojmenovaná 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ž v sadě Visual Studio zvolíte Nahradit vše, odeberou se z textu opakovaná slova.

Snímek obrazovky rychlého nahrazení znázorňující pojmenovanou skupinu zachycení v sadě Visual Studio

Tip

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

Další informace o pojmenovaných skupinách zachycení naleznete v tématu 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]*) Porovná definice s jedním celočíselnou čísly. 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ísmeny nebo číslicemi. Identifikátor je zachycen jako $1 vnější závorky.
(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 const nebo staticidentifikátoru a definované hodnoty. Všimněte si použití alespoň jednoho prázdného \s+ znaku 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+(.*)\) Porovná levou čáru smyčky foreach . Literální závorky jsou uvozené zpětným lomítkem (\). Různé skupiny jsou zachyceny jako $1, $2a $3 unescaped závorky.
#define\s+([_A-Za-z][_A-Za-z0-9]*) Porovná #define definice (bez hodnoty, pokud existuje). Definovaný token je uložen v $1.
#include\s+["<](.*)[">] Shoda zahrnuje zdrojový soubor C++.