Udostępnij za pośrednictwem


Używanie wyrażeń regularnych w programie Visual Studio

Program Visual Studio używa wyrażeń regularnych platformy .NET do znajdowania i zastępowania tekstu.

Składnia wyrażeń regularnych

Poniższa tabela zawiera kilka znaków wyrażeń regularnych, operatorów, konstrukcji i przykładów wzorców. Aby uzyskać bardziej pełną dokumentację, zobacz Język wyrażeń regularnych.

Purpose Wyrażenie Przykład
Dopasuj dowolny pojedynczy znak (z wyjątkiem podziału wiersza). Aby uzyskać więcej informacji, zobacz Dowolny znak. . a.o pasuje do "aro" w "okolice" i "abo" w "about", ale nie "acro" w "across"
Dopasuj zero lub więcej wystąpień powyższego wyrażenia (dopasuj jak najwięcej znaków). Aby uzyskać więcej informacji, zobacz Dopasuj zero lub więcej razy. * a*r pasuje do "r" w regale, "ar" w "ark" i "aar" w "aardvark"
Dopasuj dowolny znak zero lub więcej razy. .* c.*e pasuje do "cke" w "racket", "comme" w "comment" i "code" w "code"
Dopasuj co najmniej jedno wystąpienie poprzedniego wyrażenia (dopasuj jak najwięcej znaków). Aby uzyskać więcej informacji, zobacz Dopasowywanie co najmniej jednego czasu. + e+d pasuje do "eed" w "feeder" i "ed" w "faded"
Dopasuj dowolny znak co najmniej jeden raz. .+ e.+e pasuje do "eede" w "feeder", ale nie znajduje dopasowań w "feed"
Dopasuj zero lub więcej wystąpień powyższego wyrażenia (dopasuj jak najmniejszą liczbę znaków). Aby uzyskać więcej informacji, zobacz Match zero or more times (leniwe dopasowanie). *? \w*?d pasuje do "zanika" i "ed" w "wyblakłe", ale nie całe słowo "wyblakłe" ze względu na leniwy mecz
Dopasuj co najmniej jedno wystąpienie poprzedniego wyrażenia (dopasuj jak najmniejszą liczbę znaków). Aby uzyskać więcej informacji, zobacz Match one or more times (Leniwe dopasowanie). +? e\w+? pasuje do "ee" w "śpi" i "ed" w "wyblakłe", ale nie znajduje dopasowań w "fade"
Zakotwiczenie ciągu dopasowania na początku wiersza lub ciągu ^ ^car pasuje do słowa "car" tylko wtedy, gdy pojawia się na początku wiersza
Zakotwiczenie ciągu dopasowania na końcu wiersza \r?$ car\r?$ pasuje do "samochodu" tylko wtedy, gdy pojawia się na końcu linii
Zakotwiczenie ciągu dopasowania na końcu pliku $ car$ pasuje do "samochodu" tylko wtedy, gdy pojawia się na końcu pliku
Dopasuj dowolny pojedynczy znak w zestawie [abc] b[abc] pasuje do "ba", "bb" i "bc"
Dopasuj dowolny znak w zakresie znaków [a-f] be[n-t] pasuje do "bet" w "between", "ben" w "pod", i "bes" w "obok", ale nie znajduje meczów w "poniżej"
Przechwytywanie i niejawne numerowanie wyrażenia zawartego w nawiasach () ([a-z])X\1 pasuje do "aXa" i "bXb", ale nie "aXb". "\1" odnosi się do pierwszej grupy wyrażeń "[a-z]". Aby uzyskać więcej informacji, zobacz Przechwytywanie grup i wzorców zastępczych.
Unieważnianie dopasowania (?! abc) real(?!ity) pasuje do "prawdziwego" w "realty" i "naprawdę", ale nie w "rzeczywistości". Znajduje również drugi "prawdziwy" (ale nie pierwszy "prawdziwy") w "realityreal".
Dopasuj dowolny znak, który nie znajduje się w danym zestawie znaków. Aby uzyskać więcej informacji, zobacz Grupa znaków ujemnych. [^abc] be[^n-t] pasuje do "bef" w ciągu "before", "beh" w "behind" i "bel" w "below", ale nie znajduje dopasowań w "pod"
Dopasuj wyrażenie przed lub po symbolu | (sponge|mud) bath pasuje do "kąpieli gąbki" i "kąpiel błotna"
Ucieczka znaku po ukośniku odwrotnym \ \^ pasuje do znaku ^
Określ liczbę wystąpień poprzedniego znaku lub grupy. Aby uzyskać więcej informacji, zobacz Dopasowywanie dokładnie n razy. {n}, gdzie "n" jest liczbą wystąpień x(ab){2}x pasuje do "xababx"
x(ab){2,3}x pasuje do "xababx" i "xabababx", ale nie "xababababx"
Dopasuj tekst w kategorii Unicode. Aby uzyskać więcej informacji na temat klas znaków Unicode, zobacz Właściwości znaków Unicode Standard 15.0. \p{X}, gdzie "X" jest liczbą Unicode. \p{Lu} pasuje do "T" i "D" w "Thomas Doe"
Dopasuj granicę słowa \b (Poza klasą \b znaków określa granicę słowa, a wewnątrz klasy \b znaków określa backspace). \bin pasuje do "in" w "wewnątrz", ale nie znajduje dopasowań w ciągu "pinto"
Dopasuj podział wiersza (czyli powrót karetki, po którym następuje nowy wiersz lub tylko nowy wiersz) \r?\n End\r?\nBegin dopasuje ciąg "End" i "Begin" tylko wtedy, gdy ciąg "End" jest ostatnim ciągiem w wierszu, a ciąg "Begin" jest pierwszym ciągiem w następnym wierszu
Dopasuj dowolny znak wyrazu \w a\wd pasuje do "add" i "a1d", ale nie "a d"
Dopasuj dowolny znak odstępu \s Public\sInterface pasuje do frazy "Interfejs publiczny"
Dopasuj dowolny znak cyfry dziesiętnej \d \d pasuje do "4" i "0" w ciągu "wd40"

Przykładowe wyrażenie regularne łączące niektóre operatory i konstrukcje pasujące do liczby szesnastkowej to \b0[xX]([0-9a-fA-F]+)\b. To wyrażenie pasuje do "0xc67f", ale nie "0xc67g".

Napiwek

W systemach operacyjnych Windows większość wierszy kończy się na "\r\n" (powrót karetki następuje po nowym wierszu). Te znaki nie są widoczne, ale są obecne w edytorze i przekazywane do usługi wyrażeń regularnych platformy .NET. W przypadku obsługi plików z sieci Web lub z systemu operacyjnego innego niż Windows należy uwzględnić możliwość używania nowego wiersza tylko w przypadku podziału wiersza.

Przechwytywanie grup i wzorców zastępczych

Grupa przechwytywania określa podwyrażenie wyrażenia regularnego i przechwytuje podciąg ciągu wejściowego. Grup przechwyconych można użyć w samym wyrażeniu regularnym (na przykład w celu wyszukania powtórzonego słowa) lub w wzorcu zastępczym. Aby uzyskać szczegółowe informacje, zobacz Grupowanie konstrukcji w wyrażeniach regularnych.

Aby utworzyć grupę przechwytywania numerowanego, umieść podwyrażenie nawiasami we wzorcu wyrażenia regularnego. Przechwytywanie są automatycznie numerowane od lewej do prawej na podstawie położenia nawiasu otwierającego w wyrażeniu regularnym. Aby uzyskać dostęp do przechwyconej grupy, rozważ następujące przykłady:

  • W wyrażeniu regularnym: użyj polecenia \number. Na przykład \1 w wyrażeniu (\w+)\s\1 regularnym odwołuje się do pierwszej grupy (\w+)przechwytywania .

  • W wzorcu zastępczym: użyj polecenia $number. Na przykład pogrupowane wyrażenie (\d)([a-z]) regularne definiuje dwie grupy: pierwsza grupa zawiera pojedynczą cyfrę dziesiętną, a druga grupa zawiera pojedynczy znak między a i z. Wyrażenie znajduje cztery dopasowania w następującym ciągu: 1a 2b 3c 4d. Ciąg z$1 zastępczy odwołuje się tylko do pierwszej grupy ($1) i konwertuje ciąg na z1 z2 z3 z4.

Na poniższej ilustracji przedstawiono wyrażenie (\w+)\s\1 regularne i ciąg $1zastępczy . Zarówno wyrażenie regularne, jak i wzorzec zastępczy odwołują się do pierwszej grupy przechwytywania, która jest automatycznie numerowana 1. Po wybraniu opcji Zamień wszystkie w oknie dialogowym Szybkie zastępowanie w programie Visual Studio powtarzające się wyrazy zostaną usunięte z tekstu.

Zrzut ekranu przedstawiający szybką zamianę przedstawiającą grupę przechwytywania numerowanego w programie Visual Studio.

Napiwek

W oknie dialogowym Szybkie zastępowanie upewnij się, że wybrano przycisk Użyj wyrażeń regularnych lub naciśnij Alt+E.

Nazwane grupy przechwytywania

Zamiast polegać na automatycznym numerowaniu grupy przechwytywania, możesz nadać jej nazwę. Składnia nazwanej grupy przechwytywania to (?<name>subexpression).

Nazwane grupy przechwytywania, takie jak ponumerowane grupy przechwytywania, mogą być używane w samym wyrażeniu regularnym lub w wzorcu zastępczym. Aby uzyskać dostęp do nazwanej grupy przechwytywania, rozważ następujące przykłady:

  • W wyrażeniu regularnym: użyj polecenia \k<name>. Na przykład \k<repeated> w wyrażeniu (?<repeated>\w+)\s\k<repeated> regularnym odwołuje się do grupy przechwytywania o nazwie repeated i której podwyrażenie to \w+.

  • W wzorcu zastępczym: użyj polecenia ${name}. Na przykład ${repeated}.

Na poniższej ilustracji przedstawiono wyrażenie (?<repeated>\w+)\s\k<repeated> regularne i ciąg ${repeated}zastępczy . Zarówno wyrażenie regularne, jak i wzorzec zastępczy odwołują się do grupy przechwytywania o nazwie repeated. Po wybraniu opcji Zamień wszystkie w oknie dialogowym Szybkie zastępowanie w programie Visual Studio powtarzające się wyrazy zostaną usunięte z tekstu.

Zrzut ekranu szybkiego zastępowania przedstawiający nazwaną grupę przechwytywania w programie Visual Studio.

Napiwek

Pamiętaj, aby wybrać przycisk Użyj wyrażeń regularnych (lub naciśnij Alt+E) w oknie dialogowym Szybkie zastępowanie.

Aby uzyskać więcej informacji na temat nazwanych grup przechwytywania, zobacz Nazwane dopasowane podwyrażenia. Aby uzyskać więcej informacji na temat wyrażeń regularnych używanych w wzorcach zastępczych, zobacz Podstawianie w wyrażeniach regularnych.

Przykłady

Wzorzec opis
int ([_A-Za-z][_A-Za-z0-9]*) Dopasuj definicje pojedynczej liczby całkowitej. Identyfikatory zaczynają się od jednej wielkiej lub małej litery, po której następuje zero lub więcej (wskazywanych przez *) liter lub cyfr. Identyfikator jest przechwytywany przez $1 nawiasy zewnętrzne.
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ Dopasowuje deklaracje liczb całkowitych języka C#, które są inicjowane do literałów całkowitych, przechwytując różne części, w tym poziom dostępu, modyfikatory, takie jak const lub static, identyfikator i zdefiniowaną wartość. Zanotuj \s+ użycie wartości dla co najmniej jednego znaku odstępu lub \s* jeśli biały znak może lub nie występuje.
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) Dopasuj linię otwierającą foreach pętli. Nawiasy literału są zamykane ukośnikiem odwrotnym (\). Różne grupy są przechwytywane jako $1, $2i $3 przez niewyobrażalne nawiasy.
#define\s+([_A-Za-z][_A-Za-z0-9]*) Dopasuje #define definicje (bez wartości, jeśli istnieje). Zdefiniowany token jest przechowywany w pliku $1.
#include\s+["<](.*)[">] Dopasowanie uwzględniane w pliku źródłowym języka C++.