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ągz$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 $1
zastę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.
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 nazwierepeated
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.
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 , $2 i $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++. |