Udostępnij za pośrednictwem


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

Program Visual Studio używa wyrażeń regularnych .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ć pełniejsze odniesienie, zobacz język wyrażeń regularnych.

Cel 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 "around" i "abo" w "about", ale nie do "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 Match co najmniej raz. + 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 Dopasuj zero lub więcej razy (leniwe dopasowanie). *? \w*?d odpowiada "fad" i "ed" w "wyblakłe", ale nie całemu słowu "wyblakłe" ze względu na leniwe dopasowanie
Dopasuj co najmniej jedno wystąpienie poprzedniego wyrażenia (dopasuj jak najmniejszą liczbę znaków). Aby uzyskać więcej informacji, zobacz Dopasuj jeden lub więcej razy (leniwe dopasowanie). +? e\w+? pasuje do "ee" w "asleep" i "ed" w "faded", ale nie znajduje dopasowań w "fade"
Zakotwiczenie ciągu dopasowania do 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
Zakotwicz ciąg pasujący 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 "beneath" (pod), i "bes" w "beside" (obok), ale nie pasuje do "below" (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 "real" w "realty" i "really", ale nie w "reality". Znajduje również drugi "real" (ale nie pierwszy "real") 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 "before", "beh" w "behind" i "bel" w "below", ale nie znajduje dopasowań w "beneath"
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 \ \^ odpowiada znakowi ^
Określ liczbę wystąpień poprzedniego znaku lub grupy. Aby uzyskać więcej informacji, zobacz Dopasuj dokładnie n razy. {n}, gdzie "n" jest liczbą wystąpień x(ab){2}x odpowiada "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} odpowiada "T" i "D" w "Thomas Doe"
Dopasuj granicę słowa \b (Poza klasą znaków \b określa granicę słowa, a wewnątrz klasy znaków \b określa backspace). \bin pasuje do „in” w słowie „inside”, ale nie znajduje dopasowań w „pinto”
Dopasuj podział wiersza (czyli powrót karetki, po którym następuje nowy wiersz lub tylko nowy wiersz) \r?\n End\r?\nBegin pasuje do ciągu "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 alfanumeryczny \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 "wd40"

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

Napiwek

W systemach operacyjnych Windows większość linii kończy się na "\r\n" (powrót karetki, po którym następuje nowa linia). Te znaki nie są widoczne, ale są obecne w edytorze i przekazywane do usługi wyrażeń regularnych platformy .NET. Przy obsłudze plików z sieci lub z systemu operacyjnego innego niż Windows należy uwzględnić możliwość używania znaku nowej linii wyłącznie do 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 konstrukcje grupowania w wyrażeniach regularnych.

Aby utworzyć numerowaną grupę przechwytującą, otocz podwyrażenie nawiasami w wzorcu wyrażenia regularnego. Przechwycenia 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 \number. Na przykład \1 w wyrażeniu regularnym (\w+)\s\1 odwołuje się do pierwszej grupy przechwytywania (\w+).

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

Na poniższej ilustracji przedstawiono wyrażenie regularne (\w+)\s\1 i ciąg zastępczy $1. 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 Quick Replace w programie Visual Studio powtarzające się wyrazy są usuwane z tekstu.

Zrzut ekranu przedstawiający szybką zamianę z numerowaną grupą przechwytywania w programie Visual Studio.

Napiwek

W oknie dialogowym Szybkie zamienianie 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 dla nazwanej grupy przechwytywania to (?<name>subexpression).

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

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

  • Wwzorca zastępczego: użyj ${name}. Na przykład ${repeated}.

Na poniższej ilustracji przedstawiono wyrażenie regularne (?<repeated>\w+)\s\k<repeated> i ciąg zastępczy ${repeated}. 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 Quick Replace w programie Visual Studio powtarzające się wyrazy są usuwane z tekstu.

Zrzut ekranu funkcji Quick Replace pokazują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 Quick Replace.

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

Przykłady

Deseń 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 jako $1 za pomocą nawiasów zewnętrznych.
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ Dopasuj deklaracje liczb całkowitych języka C#, które są inicjalizowane do literałów całkowitych, zawierając różne części, w tym poziom dostępu, modyfikatory, takie jak const lub static, identyfikator oraz zdefiniowaną wartość. Zwróć uwagę na użycie \s+ dla co najmniej jednego białego znaku lub \s*, jeśli biały znak może wystąpić lub nie.
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) Dopasuj linię otwierającą pętlę foreach. 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]*) Dopasowuje definicje #define (bez ewentualnej wartości). Zdefiniowany token jest przechowywany w $1.
#include\s+["<](.*)[">] Dopasowanie uwzględniane w pliku źródłowym języka C++.