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ępczyz$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.
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 nazwierepeated
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.
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 , $2 i $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++. |