Delen via


Reguliere expressies gebruiken in Visual Studio

Visual Studio gebruikt reguliere .NET-expressies om tekst te zoeken en te vervangen.

Syntaxis van reguliere expressies

De volgende tabel bevat enkele reguliere expressietekens, operators, constructies en patroonvoorbeelden. Zie reguliere expressietaalvoor een volledigere referentie.

Doel Uitdrukking Voorbeeld
Komt overeen met een willekeurig teken (behalve een regeleinde). Zie Elk tekenvoor meer informatie. . a.o komt overeen met "aro" in "around" en "abo" in "about" maar niet met "acro" in "across"
Komen overeen met nul of meer voorkomens van de voorgaande expressie (passen zoveel mogelijk tekens toe). Zie Nul of meer keren vergelijkenvoor meer informatie. * a*r komt overeen met "r" in "rack", "ar" in "ark" en "aar" in "aardvark"
Kom overeen met een willekeurig teken nul of meer keer. .* c.*e komt overeen met "cke" in "racket", "comme" in "comment" en "code" in "code"
Komt overeen met een of meer exemplaren van de voorgaande expressie (match zo veel mogelijk tekens). Zie Een of meer keren vergelijkenvoor meer informatie. + e+d komt overeen met "eed" in "feeder" en "ed" in "vervaagd"
Een willekeurig teken komt een of meer keren overeen. .+ e.+e komt overeen met 'eede' in 'feeder', maar vindt geen overeenkomsten in 'feed'
Kom overeen met nul of meer exemplaren van de voorgaande expressie (match zo weinig mogelijk tekens). Zie Nul of meer keren (luie overeenkomst)voor meer informatie. *? \w*?d komt overeen met "fad" en "ed" in "vervaagd", maar niet met het hele woord "vervaagd" vanwege een luie match.
Kom overeen met een of meer voorkomens van de voorgaande uitdrukking (vergelijk zo min mogelijk tekens). Zie Eén of meer keren (luie vergelijking)voor meer informatie. +? e\w+? komt overeen met "ee" in "slaap" en "ed" in "vervaagd", maar vindt geen overeenkomsten in "vervagen"
Koppel de zoekreeks aan het begin van een regel of reeks ^ ^car komt alleen overeen met het woord 'auto' wanneer het wordt weergegeven aan het begin van een regel
De overeenkomsttekenreeks aan het einde van een regel \r?$ car\r?$ komt alleen overeen met 'auto' wanneer deze wordt weergegeven aan het einde van een regel
De zoekreeks verankeren aan het einde van het bestand $ car$ komt alleen overeen met 'auto' wanneer deze wordt weergegeven aan het einde van het bestand
Een willekeurig teken in een set vergelijken [abc] b[abc] komt overeen met 'ba', 'bb' en 'bc'
Een willekeurig teken in een reeks tekens vergelijken [a-f] be[n-t] komt overeen met "bet" in "between", "ben" in "beneath" en "bes" in "beside", maar vindt geen overeenkomsten in "below"
De expressie tussen haakjes vastleggen en impliciet nummeren () ([a-z])X\1 komt overeen met 'aXa' en 'bXb', maar niet 'aXb'. \1 verwijst naar de eerste expressiegroep [a-z]. Zie Capture-groepen en vervangingspatronenvoor meer informatie.
Een wedstrijd ongeldig maken (?! abc) real(?!ity) komt overeen met "real" in "onroerend goed" en "echt", maar niet in "werkelijkheid". Het vindt ook de tweede "real" (maar niet de eerste "real") in "realityreal".
Komt overeen met elk teken dat zich niet in een bepaalde set tekens bevindt. Zie groep Negatieve tekensvoor meer informatie. [^abc] be[^n-t] komt overeen met "bef" in "before", "beh" in "behind" en "bel" in "below", maar vindt geen overeenkomsten in "onder"
Overeenkomen met de uitdrukking vóór of de uitdrukking na het symbool | (sponge|mud) bath komt overeen met "sponsbad" en "modderbad"
Ontsnap het teken dat op de backslash volgt \ \^ komt overeen met het teken ^
Geef het aantal exemplaren op van het voorgaande teken of de voorgaande groep. Zie Exact n keer overeenkomenvoor meer informatie. {n}, waarbij 'n' het aantal exemplaren is x(ab){2}x komt overeen met "xababx"
x(ab){2,3}x komt overeen met "xababx" en "xabababx", maar niet met "xababababx".
Tekst vergelijken in een Unicode-categorie. Zie Unicode Standard 15.0 Character Propertiesvoor meer informatie over Unicode-tekenklassen. \p{X}, waarbij 'X' het Unicode-getal is. \p{Lu} komt overeen met "T" en "D" in "Thomas Doe"
een woordgrens \b (Buiten een tekenklasse \b een woordgrens opgeven en in een tekenklasse \b een backspace opgeven.) \bin komt overeen met 'in' in 'binnen', maar vindt geen overeenkomsten in 'pinto'.
Komt overeen met een regeleinde (een regelterugloop gevolgd door een nieuwe regel of alleen een nieuwe regel) \r?\n End\r?\nBegin komt alleen overeen met 'Einde' en 'Begin' als 'Einde' de laatste tekenreeks in een regel is en 'Begin' de eerste tekenreeks op de volgende regel is
Kom overeen met elk woordteken \w a\wd komt overeen met 'toevoegen' en 'a1d', maar niet 'a d'
Kom overeen met een witruimteteken \s Public\sInterface komt overeen met de woordgroep 'Openbare interface'
Voldoe aan elk decimaal cijferteken \d \d komt overeen met "4" en "0" in "wd40"

Een voorbeeld van een reguliere expressie waarin een aantal operatoren en constructies worden gecombineerd die overeenkomen met een hexadecimaal getal, is \b0[xX]([0-9a-fA-F]+)\b. Deze expressie komt overeen met '0xc67f' maar niet '0xc67g'.

Advies

In Windows-besturingssystemen eindigen de meeste regels op '\r\n' (een regelterugloop gevolgd door een nieuwe regel). Deze tekens zijn niet zichtbaar, maar zijn aanwezig in de editor en worden doorgegeven aan de .NET-service voor reguliere expressies. Wanneer u bestanden van internet of van een niet-Windows-besturingssysteem gebruikt, moet u rekening houden met de mogelijkheid dat ze alleen nieuwe regel gebruiken voor een regeleinde.

Groepen en vervangingspatronen vastleggen

Een capturegroep delineeert een subexpressie van een reguliere expressie en legt een subtekenreeks van een invoertekenreeks vast. U kunt vastgelegde groepen in de reguliere expressie zelf gebruiken (bijvoorbeeld om te zoeken naar een herhaald woord) of in een vervangend patroon. Zie Groeperingsconstructies in reguliere expressiesvoor gedetailleerde informatie.

Als u een genummerde opnamegroep wilt maken, moet u de subexpressie tussen haakjes in het reguliere expressiepatroon plaatsen. Opnamen worden automatisch genummerd van links naar rechts op basis van de positie van het openende haakje in de reguliere expressie. Bekijk de volgende voorbeelden om toegang te krijgen tot de vastgelegde groep:

  • binnen de reguliere expressie: Gebruik \number. Bijvoorbeeld, \1 in de reguliere expressie (\w+)\s\1 verwijst naar de eerste capturegroep (\w+).

  • In een vervangend patroon: gebruik $number. De gegroepeerde reguliere expressie (\d)([a-z]) definieert bijvoorbeeld twee groepen: de eerste groep bevat één decimaalteken en de tweede groep bevat één teken tussen een en z. De expressie vindt vier overeenkomsten in de volgende tekenreeks: 1a 2b 3c 4d. De vervangende tekenreeks z$1 verwijst alleen naar de eerste groep ($1) en converteert de tekenreeks naar z1 z2 z3 z4.

In de volgende afbeelding ziet u een reguliere expressie (\w+)\s\1 en een vervangende tekenreeks $1. Zowel de reguliere expressie als het vervangende patroon verwijzen naar de eerste capturegroep die automatisch wordt genummerd 1. Wanneer u Alles vervangen selecteert in het Quick Replace dialoogvenster van Visual Studio, worden herhaalde woorden uit de tekst verwijderd.

Schermopname van Quick Replace met een genummerde opnamegroep in Visual Studio.

Fooi

Controleer in het dialoogvenster Snel vervangen of de knop Reguliere expressies gebruiken is geselecteerd, of druk op Alt+E.

Benoemde capture-groepen

In plaats van te vertrouwen op de automatische nummering van een capture-groep, kunt u deze een naam geven. De syntaxis voor een benoemde capture-groep is (?<name>subexpression).

Benoemde capture-groepen, zoals genummerde capturegroepen, kunnen worden gebruikt in de reguliere expressie zelf of in een vervangend patroon. Bekijk de volgende voorbeelden om toegang te krijgen tot de benoemde capture-groep:

  • binnen de reguliere expressie: Gebruik \k<name>. Bijvoorbeeld, \k<repeated> in de reguliere expressie (?<repeated>\w+)\s\k<repeated> verwijst naar de capture-groep met de naam repeated en waarvan de subexpressie is \w+.

  • In een vervangend patroon: gebruik ${name}. Bijvoorbeeld ${repeated}.

In de volgende afbeelding ziet u een reguliere expressie (?<repeated>\w+)\s\k<repeated> en een vervangende tekenreeks ${repeated}. Zowel de reguliere expressie als het vervangingspatroon verwijzen naar de capturegroep met de naam repeated. Wanneer u Alles vervangen kiest in het dialoogvenster Snel vervangen in Visual Studio, worden herhaalde woorden uit de tekst verwijderd.

Schermopname van Quick Replace met een benoemde opnamegroep in Visual Studio.

Tip

Zorg ervoor dat u de knop Gebruik reguliere expressies selecteert (of druk op Alt+E) in het dialoogvenster Snel vervangen.

Voor meer informatie over benoemde vanggroepen, zie Benoemde overeenkomende subexpressies. Zie Vervangingen in reguliere expressiesvoor meer informatie over reguliere expressies die worden gebruikt in vervangingspatronen.

Voorbeelden

Patroon Beschrijving
int ([_A-Za-z][_A-Za-z0-9]*) Komt overeen met definities van één geheel getal. Identificators beginnen met één hoofdletter of kleine letter, gevolgd door nul of meer letters of cijfers (aangegeven door *). De identificator wordt vastgelegd als $1 door de buitenste parentheses.
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ Overeenkomen met C#-declaraties voor gehele getallen die zijn geïnitialiseerd op integer-literals, waarbij verschillende onderdelen worden vastgelegd, waaronder het toegangsniveau, de modifiers zoals const of static, de identifier, en de gedefinieerde waarde. Let op het gebruik van \s+ voor ten minste één witruimteteken of \s* als witruimte wel of niet voorkomt.
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) Komt overeen met de openingsregel van een foreach-lus. De letterlijke haakjes worden ontsnapt met backslash (\). De verschillende groepen worden vastgelegd als $1, $2en $3 door de ongezichtige haakjes.
#define\s+([_A-Za-z][_A-Za-z0-9]*) Komt overeen met #define definities (zonder de waarde, indien aanwezig). Het gedefinieerde token wordt opgeslagen in $1.
#include\s+["<](.*)[">] Overeenkomst bevat een C++-bronbestand.