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ězecz$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.
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.
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 static identifiká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 , $2 a $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++. |