Verwenden regulärer Ausdrücke in Visual Studio
Visual Studio verwendet reguläre .NET-Ausdrücke, um Text zu suchen und zu ersetzen.
Syntax regulärer Ausdrücke
Die folgende Tabelle enthält einige reguläre Ausdruckszeichen, Operatoren, Konstrukte und Musterbeispiele. 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 einem oder mehr Vorkommen. | + | e+d findet „eed“ in „feeder“ und „ed“ in „faded“. |
Übereinstimmung mit einem oder mehreren beliebigen Zeichen | .+ | e.+e entspricht "eede" in "feeder", findet aber keine Übereinstimmungen 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 entspricht dem Wort "Auto" nur, wenn es am Anfang einer Zeile angezeigt wird. |
Verankert die übereinstimmende Zeichenfolge am Ende einer Zeile | \r?$ | car\r?$ stimmt nur dann mit "Auto" überein, wenn sie am Ende einer Zeile angezeigt wird. |
Verankert die übereinstimmende Zeichenfolge am Ende der Datei | $ | car$ stimmt nur dann mit "Auto" überein, wenn sie am Ende der Datei angezeigt wird. |
Übereinstimmung mit beliebigem Zeichen in einem Satz | [abc] | b[abc] entspricht "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“. |
Erfassen Sie den in Klammern enthaltenen Ausdruck und nummerieren Sie ihn implizit. | () | ([a-z])X\1 entspricht "aXa" und "bXb", aber nicht "aXb". "\1" bezieht sich auf die erste Ausdrucksgruppe "[a-z]". Weitere Informationen finden Sie unter Erfassen von Gruppen und Ersetzungsmustern. |
Ein Spiel annullieren | (?!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 einer angegebenen Reihe 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 entspricht "Schwammbad" und "Schlammbad" |
Versehen des Zeichens hinter dem umgekehrten Schrägstrich mit Escapezeichen | \ | \^ entspricht dem Zeichen ^ |
Geben Sie die Anzahl der Vorkommen des vorhergehenden Zeichens oder der vorherigen Gruppe an. Weitere Informationen finden Sie unter Übereinstimmung mit genau n Vorkommen. | {n}, wobei "n" die Anzahl der Vorkommen ist. | x(ab){2}x entspricht "xababx"x(ab){2,3}x findet „xababx“ und „xabababx“, jedoch nicht „xababababx“. |
Text in einer Unicode-Kategorieabgleichen. Weitere Informationen zu Unicode-Zeichenklassen finden Sie unter Unicode Standard 15.0 Character Properties. | \p{X}, wobei "X" die Unicode-Nummer ist. | \p{Lu} entspricht den Buchstaben "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ücklauf gefolgt von einer neuen Zeile oder nur eine neue Zeile) | \r?\n | End\r?\nBegin trifft auf "End" und "Begin" nur dann zu, wenn "End" die letzte Zeichenfolge in einer Zeile und "Begin" die erste in der nächsten 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 entspricht dem Ausdruck "Öffentliche Schnittstelle" |
Übereinstimmung mit beliebigem Dezimalzahlzeichen | \d | \d findet „4“ und „0“ in „wd40“. |
Ein regulärer Beispielausdruck, der einige der Operatoren und Konstrukte kombiniert, um einer hexadezimalen Zahl zu entsprechen, ist \b0[xX]([0-9a-fA-F]+)\b
. Dieser Ausdruck entspricht "0xc67f", aber nicht "0xc67g".
Tipp
In Windows-Betriebssystemen enden die meisten Zeilen auf „\r\n“ (ein Wagenrücklauf gefolgt von einer neuen Zeile). Diese Zeichen sind nicht sichtbar, sind aber im Editor vorhanden und werden an den regulären .NET-Ausdrucksdienst übergeben. Bei Dateien aus dem Web oder einem Nicht-Windows-Betriebssystem umgehen sollten Sie unbedingt berücksichtigen, dass bei diesen Betriebssystemen eine neue Zeilen möglicherweise nur für einen Zeilenumbruch verwendet wird.
Erfassungsgruppen und Ersetzungsmuster
Eine Aufnahmegruppe zeichnet einen Unterausdruck eines regulären Ausdrucks ab und erfasst eine Teilzeichenfolge einer Eingabezeichenfolge. Sie können erfasste Gruppen innerhalb des regulären Ausdrucks selbst verwenden (z. B. um nach einem wiederholten Wort zu suchen) oder in einem Ersetzungsmuster. Ausführliche 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. Aufzeichnungen werden automatisch von links nach rechts nummeriert, basierend auf der Position der öffnenden Klammer im regulären Ausdruck. Beachten Sie die folgenden Beispiele, um auf die erfasste Gruppe zuzugreifen:
Innerhalb des regulären Ausdrucks: Verwenden Sie
\number
. Beispielsweise verweist\1
im regulären Ausdruck(\w+)\s\1
auf die erste Aufnahmegruppe(\w+)
.In einem Ersatzmuster: Verwenden Sie
$number
. Beispielsweise definiert der gruppierte reguläre Ausdruck(\d)([a-z])
zwei Gruppen: die erste Gruppe enthält eine einzelne Dezimalziffer, und die zweite Gruppe enthält ein einzelnes Zeichen zwischen einem und z. Der Ausdruck findet vier Übereinstimmungen in der folgenden Zeichenfolge: 1a 2b 3c 4d. Die Ersetzungszeichenfolgez$1
verweist nur auf die erste Gruppe ($1
), und konvertiert die Zeichenfolge in z1 z2 z3 z4.
Die folgende Abbildung zeigt einen regulären Ausdruck (\w+)\s\1
und eine Ersetzungszeichenfolge $1
. Sowohl der reguläre Ausdruck als auch das Ersetzungsmuster verweisen auf die erste Aufnahmegruppe, die automatisch 1 nummeriert ist. Wenn Sie in Visual Studio im Dialogfeld Schnellersetzung auf Alle ersetzen klicken, werden wiederholte Wörter aus dem Text entfernt.
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 sich auf die automatische Nummerierung einer Aufnahmegruppe zu verlassen, können Sie ihm einen Namen geben. Die Syntax für eine benannte Aufnahmegruppe ist (?<name>subexpression)
.
Benannte Erfassungsgruppen, wie nummerierte Erfassungsgruppen, können innerhalb des regulären Ausdrucks selbst oder in einem Ersatzmuster verwendet werden. Beachten Sie die folgenden Beispiele, um auf die benannte Erfassungsgruppe zuzugreifen:
Innerhalb des regulären Ausdrucks: Verwenden Sie
\k<name>
. Beispielsweise verweist\k<repeated>
im regulären Ausdruck(?<repeated>\w+)\s\k<repeated>
auf die Aufnahmegruppe, dierepeated
benannt ist und deren Unterausdruck\w+
ist.In einem Ersatzmuster: Verwenden Sie
${name}
. Beispiel:${repeated}
.
Die folgende Abbildung zeigt einen regulären Ausdruck (?<repeated>\w+)\s\k<repeated>
und eine 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.
Tipp
Stellen Sie sicher, dass Sie die Schaltfläche "Reguläre Ausdrücke verwenden" auswählen (oder im Dialogfeld Schnell ersetzen die Tastenkombination Alt+Edrücken).
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 mit einzelnen ganzzahligen Definitionen. Bezeichner beginnen mit einem Groß- oder Kleinbuchstaben, gefolgt von Null oder mehr (angegeben durch * ) Buchstaben oder Zahlen. Der Bezeichner wird von den äußeren Klammern als $1 erfasst. |
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ |
Ordnen Sie C#-Ganzzahldeklarationen zu, die auf Ganzzahl-Literale initialisiert werden, und erfassen Sie die verschiedenen Teile, einschließlich der Zugriffsebene, Modifizierer wie const oder static , den Bezeichner und den definierten Wert. Beachten Sie die Verwendung von \s+ für mindestens ein Leerzeichen oder \s* , wenn Leerzeichen möglicherweise auftreten. |
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) |
Übereinstimmung mit der öffnenden Zeile einer foreach -Schleife. Die tatsächlichen Klammern werden mit Escapezeichen in Form von umgekehrten Schrägstrichen (\ ) versehen. Die verschiedenen Gruppen werden durch die Klammern ohne Escapezeichen als $1 , $2 und $3 erfasst. |
#define\s+([_A-Za-z][_A-Za-z0-9]*) |
Übereinstimmung mit #define -Definitionen (ohne Wert, falls vorhanden). Das definierte Token wird in $1 gespeichert. |
#include\s+["<](.*)[">] |
Die Übereinstimmung enthält eine C++-Quelldatei. |