Använda reguljära uttryck i Visual Studio
Visual Studio använder reguljära .NET-uttryck för att hitta och ersätta text.
Syntax för reguljära uttryck
Följande tabell innehåller vissa reguljära uttryckstecken, operatorer, konstruktioner och mönsterexempel. En mer fullständig referens finns i reguljärt uttrycksspråk.
Avsikt | Uttryck | Exempel |
---|---|---|
Matcha ett enskilt tecken (förutom en radbrytning). Mer information finns i Alla tecken. | . |
a.o matchar "aro" i "around" och "abo" i "about" men inte "acro" i "across" |
Matcha noll eller fler förekomster av föregående uttryck (matcha så många tecken som möjligt). Mer information finns i Matcha noll eller fler gånger. | * |
a*r överensstämmer med "r" i "rack", "ar" i "ark" och "aar" i "aardvark" |
Matcha alla tecken noll eller fler gånger. | .* |
c.*e motsvarar "cke" i "racket", "comme" i "comment" och "code" i "code" |
Matcha en eller flera förekomster av föregående uttryck (matcha så många tecken som möjligt). För mer information, se Matcha en eller flera gånger. | + |
e+d matchar med "eed" i "feeder" och "ed" i "faded" |
Matcha ett eller flera tecken en eller flera gånger. | .+ |
e.+e matchar "eede" i "feeder" men hittar inga matchningar i "feed" |
Matcha noll eller fler förekomster av föregående uttryck (matcha så få tecken som möjligt). Mer information finns i Matcha noll eller fler gånger (lat matchning). | ?* |
\w*?d matchar "fad" och "ed" i "blekt" men inte hela ordet "bleknat" på grund av den lata matchen |
Matcha en eller flera förekomster av föregående uttryck (matcha så få tecken som möjligt). Mer information finns i Matcha en eller flera gånger (lat matchning). | +? |
e\w+? matchar "ee" i "sovande" och "ed" i "bleknad" men hittar inga matchningar i "fade" |
Fäst matchningssträngen i början av en rad eller sträng | ^ |
^car matchar bara ordet "bil" när det visas i början av en rad |
Fäst matchningssträngen vid slutet av en rad | \r?$ |
car\r?$ matchar endast "bil" när den visas i slutet av en rad |
Fäst matchningssträngen i slutet av filen | $ |
car$ matchar endast "bil" när den visas i slutet av filen |
Matcha ett enskilt tecken i en uppsättning | [abc] |
b[abc] matchar "ba", "bb" och "bc" |
Matcha alla tecken i ett intervall med tecken | [a-f] |
be[n-t] matchar "bet" i "between", "ben" i "beneath" och "bes" i "beside", men hittar inga matchningar i "below" |
Avbilda och implicit numrera uttrycket som finns inom parentes | () |
([a-z])X\1 matchar "aXa" och "bXb", men inte "aXb". "\1" refererar till den första uttrycksgruppen "[a-z]". Mer information finns i Fångstgrupper och ersättningsmönster. |
Ogiltigförklara en matchning | (?! abc) |
real(?!ity) matchar "verklig" i "realty" och "verkligen" men inte i "verkligheten". Den hittar också den andra "riktiga" (men inte den första "riktiga") i "realityreal". |
Matcha alla tecken som inte finns i en viss uppsättning tecken. För mer information, se Negativ teckengrupp. | [^abc] |
be[^n-t] matchar "bef" i "before", "beh" i "behind" och "bel" i "below", men hittar inga matchningar i "under" |
Matcha antingen uttrycket före eller det efter symbolen | | |
(sponge|mud) bath matchar "svampbad" och "lerbad" |
Undvik tecknet efter omvänt snedstreck | \ |
\^ motsvarar det tecknet ^ |
Ange antalet förekomster av föregående tecken eller grupp. Mer information finns i Matcha exakt n gånger. | {n}, där 'n' är antalet förekomster |
x(ab){2}x matchar "xababx"x(ab){2,3}x matchar "xababx" och "xabababx" men inte "xababababx" |
Matcha text inom en Unicode-kategori. Mer information om Unicode-teckenklasser finns i Unicode Standard 15.0-teckenegenskaper. | \p{X}, där "X" är Unicode-talet. |
\p{Lu} matchar "T" och "D" i "Thomas Doe" |
Matcha en ordgräns | \b (Utanför en teckenklass anger \b en ordgräns och i en teckenklass \b anger en backspace.) |
\bin matchar "in" i "inuti" men hittar inga matchningar i "pinto" |
Matcha en radbrytning (dvs. en vagnretur följt av en ny rad eller endast en ny rad) | \r?\n |
End\r?\nBegin matchar endast "End" och "Begin" när "End" är den sista strängen på en rad och "Begin" är den första strängen på nästa rad |
Matcha valfritt ordtecken | \w |
a\wd stämmer överens med "add" och "a1d" men inte "a d" |
Matcha alla mellanslagstecken | \s |
Public\sInterface matchar frasen "Offentligt gränssnitt" |
Matcha någon decimalsiffra | \d |
\d matchar "4" och "0" i "wd40" |
Ett exempel på reguljärt uttryck som kombinerar några av operatorerna och konstruktionerna för att matcha ett hexadecimalt tal är \b0[xX]([0-9a-fA-F]+)\b
. Det här uttrycket matchar "0xc67f" men inte "0xc67g".
Tips
I Windows-operativsystem slutar de flesta av raderna med "\r\n" (retur följt av en ny rad). Dessa tecken visas inte men finns i redigeraren och skickas till .NET regular expression-tjänsten. När du hanterar filer från webben eller från ett icke-Windows-operativsystem måste du ta hänsyn till möjligheten att de endast använder en ny rad för en radbrytning.
Avbilda grupper och ersättningsmönster
En fångstgrupp avgränsar ett deluttryck av ett reguljärt uttryck och fångar en delsträng av en indatasträng. Du kan använda insamlade grupper i själva reguljära uttryck (till exempel för att söka efter ett upprepat ord) eller i ett ersättningsmönster. Detaljerad information finns i Grupperingskonstruktioner i reguljära uttryck.
För att skapa en numrerad fångstgrupp omger du underuttrycket med parenteser i det reguljära uttrycksmönstret. Avbildningar numreras automatiskt från vänster till höger baserat på positionen för den inledande parentesen i det reguljära uttrycket. Överväg följande exempel för att komma åt den insamlade gruppen:
I det reguljära uttrycket: Använd
\number
. Till exempel refererar\1
i det reguljära uttrycket(\w+)\s\1
till den första avbildningsgruppen(\w+)
.I ett ersättningsmönster: Använd
$number
. Det grupperade reguljära uttrycket(\d)([a-z])
definierar till exempel två grupper: den första gruppen innehåller en decimalsiffra och den andra gruppen innehåller ett enda tecken mellan en och z. Uttrycket hittar fyra matchningar i följande sträng: 1a 2b 3c 4d. Ersättningssträngenz$1
refererar endast till den första gruppen ($1
) och konverterar strängen till z1 z2 z3 z4.
Följande bild visar ett reguljärt uttryck (\w+)\s\1
och en ersättningssträng $1
. Både det reguljära uttrycket och ersättningsmönstret refererar till den första avbildningsgruppen som automatiskt numreras 1. När du väljer Ersätt alla i dialogrutan Snabb ersättning i Visual Studio tas upprepade ord bort från texten.
Tips
I dialogrutan Snabb ersätt väljer du knappen Använd reguljära uttryck eller trycker på Alt+E.
Namngivna fångstgrupper
I stället för att förlita dig på automatisk numrering av en avbildningsgrupp kan du ge den ett namn. Syntaxen för en namngiven fångstgrupp är (?<name>subexpression)
.
Namngivna avbildningsgrupper, till exempel numrerade avbildningsgrupper, kan användas i själva reguljära uttryck eller i ett ersättningsmönster. Tänk på följande exempel för att få åtkomst till den namngivna infångningsgruppen:
I det reguljära uttrycket: Använd
\k<name>
. Till exempel refererar\k<repeated>
i det reguljära uttrycket(?<repeated>\w+)\s\k<repeated>
till den avbildningsgrupp som heterrepeated
och vars underuttryck är\w+
.I ett ersättningsmönster: Använd
${name}
. Till exempel${repeated}
.
Följande bild visar ett reguljärt uttryck (?<repeated>\w+)\s\k<repeated>
och en ersättningssträng ${repeated}
. Både det reguljära uttrycket och ersättningsmönstret refererar till fångstgruppen som heter repeated
. När du väljer Ersätt alla i dialogrutan Snabb ersättning i Visual Studio tas upprepade ord bort från texten.
Tips
Välj knappen Använd reguljära uttryck (eller tryck på Alt+E) i dialogrutan Snabb ersätt.
Mer information om namngivna fångstgrupper finns i Namngivna matchade underuttryck. Mer information om reguljära uttryck som används i ersättningsmönster finns i Substitutioner i reguljära uttryck.
Exempel
Mönster | Beskrivning |
---|---|
int ([_A-Za-z][_A-Za-z0-9]*) |
Matcha enstaka heltalsdefinitioner. Identifierare börjar med en versal eller gemen bokstav följt av noll eller fler (anges av * ) bokstäver eller siffror. Identifieraren fångas upp som $1 av de yttre parenteserna. |
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ |
Matcha C#-heltalsdeklarationer som initieras till heltalsliteraler, samla in de olika delarna, inklusive åtkomstnivå, modifierare som const eller static , identifieraren och det definierade värdet. Observera användningen av \s+ för minst ett blankstegstecken eller \s* om blanksteg kan uppstå eller inte. |
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) |
Matcha öppningsraden i en foreach -loop. De literala parenteserna är undantagna med omvänt snedstreck (\ ). De olika grupperna avbildas som $1 , $2 och $3 av de inkapslade parenteserna. |
#define\s+([_A-Za-z][_A-Za-z0-9]*) |
Matchar #define -definitioner (utan värdet, om något). Den definierade token lagras i $1 . |
#include\s+["<](.*)[">] |
Matchning ingår i en C++-källfil. |