Verwenden von regulären Ausdrücken in Visual Studio

Visual Studio verwendet reguläre .NET-Ausdrücke zum Suchen und Ersetzen von Text.

Syntax regulärer Ausdrücke

Die folgende Tabelle enthält eine Auswahl an Zeichen, Operatoren, Konstrukten und Musterbeispielen für reguläre Ausdrücke. Eine vollständige Referenz finden Sie unter Sprachelemente für reguläre Ausdrücke.

Zweck Ausdruck Beispiel
Übereinstimmung mit beliebigem Zeichen (mit Ausnahme des Zeilenumbruchs). Weitere Informationen finden Sie unter Alle Zeichen. . a.o findet „aro“ in „around“ und „abo“ in „about“, jedoch nicht „acro“ in „across“.
Übereinstimmung mit keinem oder mehreren Vorkommen des vorhergehenden Ausdrucks (wobei die Übereinstimmung möglichst viele Zeichen umfasst). Weitere Informationen finden Sie unter Übereinstimmung mit null oder mehr Vorkommen. * a*r findet „r“ in „rack“, „ar“ in „ark“ und „aar“ in „aardvark“.
Übereinstimmung mit keinem oder mehreren beliebigen Zeichen. .* c.*e findet „cke“ in „racket“, „comme“ in „comment“ und „code“ in „code“.
Übereinstimmung mit einem oder mehreren Vorkommen des vorhergehenden Ausdrucks (wobei die Übereinstimmung möglichst viele Zeichen umfasst). Weitere Informationen finden Sie unter Übereinstimmung mit null oder mehr Vorkommen. + e+d findet „eed“ in „feeder“ und „ed“ in „faded“.
Entspricht einem oder mehreren die oft ausgegebene Befehlszeilen Zeichen. .+ e.+e findet „eede“ in „feeder“, aber findet keine Übereinstimmung in „feed“.
Übereinstimmung mit keinem oder mehreren Vorkommen des vorhergehenden Ausdrucks (wobei die Übereinstimmung möglichst wenig Zeichen umfasst). Weitere Informationen finden Sie unter Übereinstimmung mit null oder mehr Vorkommen (träger Abgleich). *? \w*?d findet „fad“ und „ed“ in „faded“, aber aufgrund eines trägen Abgleichs nicht das ganze Wort „faded“.
Übereinstimmung mit einem oder mehreren Vorkommen des vorhergehenden Ausdrucks (wobei die Übereinstimmung möglichst wenig Zeichen umfasst). Weitere Informationen finden Sie unter Übereinstimmung mit einem oder mehr Vorkommen (träger Abgleich). +? e\w+? findet „ee“ in „asleep“ und „ed“ in „faded“, aber findet keine Übereinstimmungen in „fade“.
Verankert die übereinstimmende Zeichenfolge am Anfang einer Zeile oder Zeichenfolge. ^ ^car findet das Wort „car“ nur, wenn es am Anfang einer Zeile angezeigt wird.
Verankert die übereinstimmende Zeichenfolge am Ende einer Zeile. \r?$ car\r?$ findet „car“ nur, wenn es am Ende einer Zeile angezeigt wird.
Verankern der übereinstimmende Zeichenfolge am Ende der Datei $ car$ findet „car“ nur, wenn es am Ende der Datei angezeigt wird.
Übereinstimmung mit beliebigem Zeichen in einem Satz [abc] b[abc] findet „ba“, „bb“ und „bc“.
Übereinstimmung mit beliebigem Zeichen in einem Bereich von Zeichen [a-f] be[n-t] findet „bet“ in „between“, „ben“ in „beneath“ und „bes“ in „beside“, aber findet keine Übereinstimmungen in „below“.
Erfassung und implizite Nummerierung des in Klammern befindlichen Ausdrucks () ([a-z])X\1 findet „aXa“ und „bXb“, jedoch nicht „aXb“. „\1“ bezieht sich auf die erste Ausdrucksgruppe „[a-z]“. Weitere Informationen finden Sie unter Erfassungsgruppen und Ersetzungsmuster.
Aufheben der Gültigkeit einer Übereinstimmung (?!abc) real(?!ity) findet „real“ in „realty“ und „really“, jedoch nicht in „reality“. Findet außerdem das zweite „real“ (jedoch nicht das erste „real“) in „realityreal“.
Übereinstimmung mit beliebigem Zeichen, das sich nicht in einem angegebenen Satz von Zeichen befindet. Weitere Informationen finden Sie unter Negative Zeichengruppe. [^abc] be[^n-t] findet „bef“ in „before“, „beh“ in „behind“ und „bel“ in „below“, aber findet keine Übereinstimmungen in „beneath“.
Übereinstimmung mit dem Ausdruck vor oder nach dem Symbol. | (sponge|mud) bath findet „sponge bath“ und „mud bath“.
Versehen des Zeichens hinter dem umgekehrten Schrägstrich mit Escapezeichen. \ \^ findet das Zeichen „^“.
Angeben der Anzahl von Vorkommen des vorherigen Zeichens oder der Gruppe. Weitere Informationen finden Sie unter Übereinstimmung mit genau n Vorkommen. {n}, wobei n die Anzahl von Vorkommen ist. x(ab){2}x findet „xababx“.
x(ab){2,3}x findet „xababx“ und „xabababx“, jedoch nicht „xababababx“.
Übereinstimmung mit Text in einer Unicode-Kategorie. Weitere Informationen zu Unicode-Zeichenklassen finden Sie unter Unicode Standard 15.0 Character Properties. \p{X}, wobei "X" die Unicode-Nummer angibt. \p{Lu} findet „T“ und „D“ in „Thomas Doe“.
Übereinstimmung mit einer Wortgrenze \b (Außerhalb einer Zeichenklasse gibt \b eine Wortgrenze, innerhalb einer Zeichenklasse gibt \b eine Rücktaste an.) \bin findet „in“ in „inside“, findet aber keine Übereinstimmungen in „pinto“.
Übereinstimmung mit Zeilenumbruch (d. h. ein Wagenrücklaufzeichen gefolgt von einer neuen Zeile, oder nur eine neue Zeile). \r?\n End\r?\nBegin findet „End“ und „Begin“ nur, wenn „End“ die letzte Zeichenfolge in einer Zeile ist und „Begin“ die erste Zeichenfolge in der darauffolgenden Zeile ist.
Übereinstimmung mit einem beliebigen Wortzeichen. \w a\wd findet „add“ und „a1d“, jedoch nicht „a d“.
Übereinstimmung mit beliebigem Leerzeichen. \s Public\sInterface findet den Begriff „Public Interface“.
Übereinstimmung mit beliebigem Dezimalzahlzeichen. \d \d findet „4“ und „0“ in „wd40“.

\b0[xX]([0-9a-fA-F]+)\b ist ein Beispiel für einen regulären Ausdruck, der einige Operatoren und Konstrukte kombiniert, um eine hexadezimale Zahl zu finden. Dieser Ausdruck findet „0xc67f“, aber nicht „0xc67g“.

Tipp

In Windows-Betriebssystemen enden die meisten Zeilen auf „\r\n“ (ein Wagenrücklaufzeichen gefolgt von einer neuen Zeile). Diese Zeichen sind nicht sichtbar, aber im Editor vorhanden und werden an den .NET-Dienst regulärer Ausdrücke übergeben. Wenn Sie Dateien aus dem Web oder einem Nicht-Windows-Betriebssystem bearbeiten, sollten Sie unbedingt die Möglichkeit berücksichtigen, dass diese nur für einen Zeilenumbruch neue Zeilen verwenden.

Erfassungsgruppen und Ersetzungsmuster

Eine Erfassungsgruppe beschreibt einen Teilausdruck eines regulären Ausdrucks und erfasst eine Teilzeichenfolge einer Eingabezeichenfolge. Sie können erfasste Gruppen innerhalb des regulären Ausdrucks selbst (z.B. um nach einem wiederholten Wort zu suchen) oder in einem Ersetzungsmuster verwenden. Weitere Informationen finden Sie unter Gruppierungskonstrukte in regulären Ausdrücken.

Um eine nummerierte Erfassungsgruppe zu erstellen, setzen Sie den Teilausdruck im Muster eines regulären Ausdrucks in Klammern. Erfassungen werden automatisch von links nach rechts nummeriert, und zwar basierend auf der Position der öffnenden Klammer im regulären Ausdruck. Sehen Sie sich für den Zugriff auf die Erfassungsgruppe die folgenden Beispiele an:

  • Im regulären Ausdruck: Verwenden Sie \number. So verweist beispielsweise \1 im regulären Ausdruck (\w+)\s\1 auf die erste Erfassungsgruppe (\w+).

  • In einem Ersetzungsmuster: Verwenden Sie $number. Der gruppierte reguläre Ausdruck (\d)([a-z]) definiert beispielsweise zwei Gruppen: die erste Gruppe enthält eine einzelne Dezimalstelle, und die zweite Gruppe enthält ein einzelnes Zeichen zwischen a und z. Der Ausdruck findet vier Übereinstimmungen in der folgenden Zeichenfolge: 1a 2b 3c 4d. Die Ersetzungszeichenfolge z$1 verweist nur auf die erste Gruppe ($1) und konvertiert die Zeichenfolge in z1 z2 z3 z4.

Die folgende Abbildung zeigt den regulären Ausdruck (\w+)\s\1 und die Ersetzungszeichenfolge $1. Sowohl der reguläre Ausdruck als auch das Ersetzungsmuster verweisen auf die erste Erfassungsgruppe, die automatisch mit der Nummer 1 versehen wurde. Wenn Sie in Visual Studio im Dialogfeld Schnellersetzung auf Alle ersetzen klicken, werden wiederholte Wörter aus dem Text entfernt.

Screenshot einer Schnellersetzung mit einer nummerierte Erfassungsgruppe in Visual Studio

Tipp

Wählen Sie im Dialogfeld Schnellersetzung die Schaltfläche Reguläre Ausdrücke verwenden aus, oder drücken Sie ALT+E.

Benannte Erfassungsgruppen

Anstatt auf die automatische Nummerierung einer Erfassungsgruppe zu vertrauen, können Sie ihr einen Namen geben. Die Syntax für eine benannte Erfassungsgruppe ist (?<name>subexpression).

Benannte Erfassungsgruppen können wie nummerierte Erfassungsgruppen innerhalb des regulären Ausdrucks selbst oder in einem Ersetzungsmuster verwendet werden. Sehen Sie sich für den Zugriff auf die benannte Erfassungsgruppe die folgenden Beispiele an:

  • Im regulären Ausdruck: Verwenden Sie \k<name>. So verweist beispielsweise \k<repeated> im regulären Ausdruck (?<repeated>\w+)\s\k<repeated> auf die Erfassungsgruppe, die repeated heißt und deren Teilausdruck \w+ ist.

  • In einem Ersetzungsmuster: Verwenden Sie ${name}. Beispiel: ${repeated}.

Die folgende Abbildung zeigt den regulären Ausdruck (?<repeated>\w+)\s\k<repeated> und die Ersetzungszeichenfolge ${repeated}. Sowohl der reguläre Ausdruck als auch das Ersetzungsmuster verweisen auf Erfassungsgruppe mit dem Namen repeated. Wenn Sie in Visual Studio im Dialogfeld Schnellersetzung auf Alle ersetzen klicken, werden wiederholte Wörter aus dem Text entfernt.

Screenshot einer Schnellersetzung mit einer benannten Erfassungsgruppe in Visual Studio

Tipp

Wählen Sie im Dialogfeld Schnellersetzung die Schaltfläche Reguläre Ausdrücke verwenden aus (oder drücken Sie ALT+E).

Weitere Informationen zu benannten Erfassungsgruppen finden Sie unter Benannte übereinstimmende Teilausdrücke. Weitere Informationen zu regulären Ausdrücken, die in Ersetzungsmustern verwendet werden, finden Sie unter Ersetzungen in regulären Ausdrücken.

Beispiele

Muster Beschreibung
int ([_A-Za-z][_A-Za-z0-9]*) Übereinstimmung der einzelnen Integerdefinitionen. Bezeichner beginnen mit einem Groß- oder Kleinbuchstaben, gefolgt von einer Null oder mehreren Buchstaben oder Zahlen (angegeben durch *). Der Bezeichner wird durch die äußeren Klammern wie $1 erfasst.
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ Stimmen Sie installierte C#-Ganzzahldeklarationen auf die Integer-Literale ab, indem Sie die verschiedenen Teile erfassen, einschließlich Zugriffsebene, Modifizierer wie const oder static Bezeichner und definierter Wert. Achten Sie auf die Verwendung von \s+ für mindestens ein Leerzeichen, oder von \s*, wenn Leerzeichen auftreten oder nicht.
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) Übereinstimmung mit der ersten Zeile einer foreach-Schleife. Die Literalklammern werden mithilfe eines umgekehrten Schrägstrichs mit Escapezeichen versehen (\). Die verschiedenen Gruppen werden als $1, $2 und als $3 von den Klammern erfasst, die nicht mit Escapezeichen versehen wurden.
#define\s+([_A-Za-z][_A-Za-z0-9]*) Übereinstimmung mit #define-Definitionen (ggf. ohne den Wert). Das definierte Token wird in $1 gespeichert.
#include\s+["<](.*)[">] Übereinstimmung von Einbeziehungen in einer C++-Quelldatei.