Język wyrażeń regularnych — podręczny wykaz
Wyrażenie regularne to wzorzec, który aparat wyrażeń regularnych próbuje dopasować w tekście wejściowym. Wzorzec składa się z co najmniej jednego literału znakowego, operatora lub konstrukcji. Aby zapoznać się z krótkim wprowadzeniem, zobacz Wyrażenia regularne platformy .NET.
Każda sekcja w tej krótkiej dokumentacji zawiera określoną kategorię znaków, operatorów i konstrukcji, których można użyć do definiowania wyrażeń regularnych.
Udostępniliśmy również te informacje w dwóch formatach, które można pobrać i wydrukować w celu łatwego dokumentacji:
Znaki unikowe
Znak ukośnika odwrotnego (\) w wyrażeniu regularnym wskazuje, że znak, który następuje po nim, jest znakiem specjalnym (jak pokazano w poniższej tabeli) lub powinien być interpretowany dosłownie. Aby uzyskać więcej informacji, zobacz Znaki ucieczki.
Znak poprzedzony znakiem ucieczki | opis | Wzorzec | Dopasowania |
---|---|---|---|
\a |
Dopasowuje znak sygnału dźwiękowego, \u0007. | \a |
"\u0007" w systemie "Error!" + '\u0007' |
\b |
W klasie znaków dopasowuje znak backspace, \u0008. | [\b]{3,} |
"\b\b\b\b" w systemie "\b\b\b\b" |
\t |
Dopasowuje znak tabulatora, \u0009. | (\w+)\t |
"item1\t" , "item2\t" w "item1\titem2\t" |
\r |
Dopasowuje znak powrotu karetki, \u000D (\r nie jest odpowiednikiem znaku nowego wiersza, \n .) |
\r\n(\w+) |
"\r\nThese" w systemie "\r\nThese are\ntwo lines." |
\v |
Dopasowuje tabulator pionowy, \u000B. | [\v]{2,} |
"\v\v\v" w systemie "\v\v\v" |
\f |
Dopasowuje znak wysuwu strony, \u000C. | [\f]{2,} |
"\f\f\f" w systemie "\f\f\f" |
\n |
Dopasowuje znak nowego wiersza, \u000A. | \r\n(\w+) |
"\r\nThese" w systemie "\r\nThese are\ntwo lines." |
\e |
Dopasowuje znak escape, \u001B. | \e |
"\x001B" w systemie "\x001B" |
\ nnn |
Używa reprezentacji ósemkowej do określenia znaku (nnn składa się z dwóch lub trzech cyfr). | \w\040\w |
"a b" , "c d" w "a bc d" |
\x nn |
Używa reprezentacji szesnastkowej do określenia znaku (nn składa się z dokładnie dwóch cyfr). | \w\x20\w |
"a b" , "c d" w "a bc d" |
\c X\c x |
Pasuje do znaku kontrolki ASCII określonego przez znak X lub x, gdzie X lub x jest literą znaku kontrolki. | \cC |
"\x0003" in "\x0003" (Ctrl-C) |
\u nnnn |
Dopasuje znak Unicode przy użyciu reprezentacji szesnastkowej (dokładnie cztery cyfry, reprezentowane przez nnnn). | \w\u0020\w |
"a b" , "c d" w "a bc d" |
\ |
Kiedy następuje po nim znak, który nie jest rozpoznawany jako znak ucieczki w tej lub innej tabeli zawartej w tym temacie, dopasowuje ten znak. Na przykład \* jest taka sama jak , i \. jest taka sama jak \x2A \x2E . Dzięki temu aparat wyrażeń regularnych może uściślać elementy języka (takie jak * lub ?) i literały znaków (reprezentowane przez \* lub \? ). |
\d+[\+-x\*]\d+ |
"2+2" i "3*9" w elemencie "(2+2) * 3*9" |
Klasy znaku
Klasa znaków dopasowuje dowolny zestaw znaków. Klasy znaków obejmują elementy języka wymienione w poniższej tabeli. Aby uzyskać więcej informacji, zobacz Klasy znaków.
Klasa znaków | opis | Wzorzec | Dopasowania |
---|---|---|---|
[ character_group ] |
Pasuje do dowolnego pojedynczego znaku w character_group. Domyślnie w dopasowaniu jest uwzględniana wielkość liter. | [ae] |
"a" w systemie "gray" "a" , "e" w "lane" |
[^ character_group ] |
Negacja: dopasuje dowolny pojedynczy znak, który nie znajduje się w character_group. Domyślnie znaki w character_group są uwzględniane wielkości liter. | [^aei] |
"r" , , "g" "n" in"reign" |
[ pierwszy - ostatni ] |
Zakres znaków: pasuje do dowolnego pojedynczego znaku w zakresie od pierwszego do ostatniego. | [A-Z] |
"A" , "B" w "AB123" |
. |
Symbol wieloznaczny: pasuje do dowolnego pojedynczego znaku z wyjątkiem \n .Aby dopasować znak kropki literału (. lub \u002E ), należy poprzedzić go znakiem ucieczki (\. ). |
a.e |
"ave" w systemie "nave" "ate" w systemie "water" |
\p{ nazwa } |
Pasuje do dowolnego pojedynczego znaku w kategorii ogólnej Unicode lub nazwanego bloku określonego przez nazwę. | \p{Lu} \p{IsCyrillic} |
"C" , "L" w "City Lights" "Д" , "Ж" w "ДЖem" |
\P{ nazwa } |
Dopasuje dowolny pojedynczy znak, który nie znajduje się w kategorii ogólnej Unicode lub nazwany blok określony przez nazwę. | \P{Lu} \P{IsCyrillic} |
"i" , , "t" "y" in"City" "e" , "m" w "ДЖem" |
\w |
Pasuje do dowolnego znaku wyrazu. | \w |
"I" , , "D" , "1" "A" , "3" w"ID A1.3" |
\W |
Pasuje do dowolnego znaku innego niż wyraz. | \W |
" " , "." w "ID A1.3" |
\s |
Pasuje do dowolnego znaku odstępu. | \w\s |
"D " w systemie "ID A1.3" |
\S |
Pasuje do dowolnego znaku innego niż odstęp. | \s\S |
" _" w systemie "int __ctr" |
\d |
Dopasuje dowolną cyfrę dziesiętną. | \d |
"4" w systemie "4 = IV" |
\D |
Pasuje do dowolnego znaku innego niż cyfra dziesiętna. | \D |
" " , , "=" , "I" " " , "V" w"4 = IV" |
Kotwice
Kotwice (niepodzielne asercje o zerowej szerokości) powodują, że sukces lub niepowodzenie dopasowywania jest zależne od bieżącej pozycji w ciągu, ale nie powodują, że aparat przechodzi do dalszej części ciągu lub używa znaków. Metaznaki wymienione w poniższej tabeli są kotwicami. Aby uzyskać więcej informacji, zobacz Kotwice.
Asercja | opis | Wzorzec | Dopasowania |
---|---|---|---|
^ |
Domyślnie dopasowanie musi rozpoczynać się na początku ciągu; w trybie wielowierszowym musi zaczynać się od początku wiersza. | ^\d{3} |
"901" w systemie "901-333-" |
$ |
Domyślnie dopasowanie musi występować na końcu ciągu lub przed \n końcem ciągu; w trybie wielowierszowym musi nastąpić przed końcem wiersza lub przed \n końcem wiersza. |
-\d{3}$ |
"-333" w systemie "-901-333" |
\A |
Dopasowanie musi wystąpić na początku ciągu. | \A\d{3} |
"901" w systemie "901-333-" |
\Z |
Dopasowanie musi wystąpić na końcu ciągu lub przed \n na końcu ciągu. |
-\d{3}\Z |
"-333" w systemie "-901-333" |
\z |
Dopasowanie musi wystąpić na końcu ciągu. | -\d{3}\z |
"-333" w systemie "-901-333" |
\G |
Dopasowanie musi wystąpić w punkcie, w którym zakończyło się poprzednie dopasowanie lub jeśli nie było poprzedniego dopasowania, na pozycji w ciągu, w którym rozpoczęto dopasowywanie. | \G\(\d\) |
"(1)" , , "(3)" "(5)" in"(1)(3)(5)[7](9)" |
\b |
Dopasowanie musi występować na granicy między znakiem \w (alfanumerycznym) i znakiem \W (niefanumerycznym). |
\b\w+\s\w+\b |
"them theme" , "them them" w "them theme them them" |
\B |
Dopasowanie nie może występować na \b granicy. |
\Bend\w*\b |
"ends" , "ender" w "end sends endure lender" |
Konstrukty grupujące
Konstrukcje grupujące wyznaczają podwyrażenia wyrażeń regularnych i często przechwytywane podciągi ciągu wejściowego. Konstrukcje grupowania obejmują elementy języka wymienione w poniższej tabeli. Aby uzyskać więcej informacji, zobacz Grouping Constructs (Konstrukcje grupowania).
Konstrukcja grupująca | opis | Wzorzec | Dopasowania |
---|---|---|---|
( Subexpression ) |
Przechwytuje dopasowane podwyrażenia i przypisuje mu liczbę porządkową (liczone od zera). | (\w)\1 |
"ee" w systemie "deep" |
(?< nazwa > Subexpression ) lub (?' nazwa ' Subexpression ) |
Przechwytuje dopasowane podwyrażenie do nazwanej grupy. | (?<double>\w)\k<double> |
"ee" w systemie "deep" |
(?< name1 - name2 > Subexpression ) lub (?' name1 - name2 ' Subexpression ) |
Określa definicję grupy równoważącej. Aby uzyskać więcej informacji, zobacz sekcję "Równoważenie definicji grupy" w temacie Konstrukcje grupowania. | (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ |
"((1-3)*(3-1))" w systemie "3+2^((1-3)*(3-1))" |
(?: Subexpression ) |
Definiuje nieprzechwytywaną grupę. | Write(?:Line)? |
"WriteLine" w systemie "Console.WriteLine()" "Write" w systemie "Console.Write(value)" |
(?imnsx-imnsx: Subexpression ) |
Stosuje lub wyłącza określone opcje w podrażeniu. Aby uzyskać więcej informacji, zobacz Opcje wyrażeń regularnych. | A\d{2}(?i:\w+)\b |
"A12xl" , "A12XL" w "A12xl A12XL a12xl" |
(?= Subexpression ) |
Pozytywna asercja wyprzedzająca o zerowej szerokości. | \b\w+\b(?=.+and.+) |
"cats" , "dogs" w "cats, dogs and some mice." |
(?! Subexpression ) |
Negatywna asercja wyprzedzająca o zerowej szerokości. | \b\w+\b(?!.+and.+) |
"and" , , "some" "mice" w "cats, dogs and some mice." |
(?<= Subexpression ) |
Pozytywna asercja wsteczna o zerowej szerokości. | \b\w+\b(?<=.+and.+) ——————————— \b\w+\b(?<=.+and.*) |
"some" , "mice" w "cats, dogs and some mice." ———————————— "and" , , "some" "mice" w "cats, dogs and some mice." |
(?<! Subexpression ) |
Negatywna asercja wsteczna o zerowej szerokości. | \b\w+\b(?<!.+and.+) ——————————— \b\w+\b(?<!.+and.*) |
"cats" , , "dogs" "and" w "cats, dogs and some mice." ———————————— "cats" , "dogs" w "cats, dogs and some mice." |
(?> Subexpression ) |
Grupa niepodzielna. | '(?>a|ab)c | "ac" w"ac" nic w "abc" |
Spojrzenie na pierwszy rzut oka
Gdy aparat wyrażeń regularnych osiąga wyrażenie lookaround, pobiera podciąg z bieżącej pozycji do początku (lookbehind) lub koniec (lookahead) oryginalnego ciągu, a następnie uruchamia Regex.IsMatch na tym podciągu przy użyciu wzorca lookaround. Sukces wyniku tego podwyrażenia jest następnie określany przez to, czy jest to asercja dodatnia, czy negatywna.
Lookaround | Nazwisko | Funkcja |
---|---|---|
(?=check) |
Pozytywne spojrzenie | Potwierdza, że to, co natychmiast następuje po bieżącym położeniu w ciągu, to "check" |
(?<=check) |
Dodatnia funkcja Lookbehind | Potwierdza, że to, co bezpośrednio poprzedza bieżącą pozycję w ciągu, to "check" |
(?!check) |
Negatywne spojrzenie | Potwierdza, że to, co natychmiast następuje po bieżącym położeniu w ciągu, nie jest "check" |
(?<!check) |
Negatywna wartość lookbehind | Potwierdza, że to, co bezpośrednio poprzedza bieżącą pozycję w ciągu, nie jest "check" |
Po dopasowaniu grupy niepodzielne nie zostaną ponownie ocenione, nawet jeśli pozostała część wzorca zakończy się niepowodzeniem z powodu dopasowania. Może to znacznie poprawić wydajność, gdy kwantyfikatory występują w grupie niepodzielnej lub w pozostałej części wzorca.
Kwantyfikatory
Kwantyfikator określa, ile wystąpień poprzedniego elementu (którym może być znak, grupa lub klasa znaków) musi znajdować się w ciągu wejściowym, aby wystąpiło dopasowanie. Kwantyfikatory obejmują elementy języka wymienione w poniższej tabeli. Aby uzyskać więcej informacji, zobacz Kwantyfikatory.
Kwantyfikator | opis | Wzorzec | Dopasowania |
---|---|---|---|
* |
Dopasowuje poprzedni element zero lub większą liczbę razy. | a.*c |
"abcbc" w systemie "abcbc" |
+ |
Dopasowuje poprzedni element co najmniej raz. | "be+" |
"bee" in , "be" in "been" "bent" |
? |
Dopasowuje poprzedni element zero lub jeden raz. | "rai?" |
"rai" w systemie "rain" |
{ n } |
Pasuje do poprzedniego elementu dokładnie n razy. | ",\d{3}" |
",043" w "1,043.6" systemach , ",876" , ",543" i ",210" w "9,876,543,210" |
{ n ,} |
Pasuje do poprzedniego elementu co najmniej n razy. | "\d{2,}" |
"166" , , "29" "1930" |
{ n , m } |
Pasuje do poprzedniego elementu co najmniej n razy, ale nie więcej niż m razy. | "\d{3,5}" |
"166" , "17668" "19302" w systemie "193024" |
*? |
Dopasowuje poprzedni element zero lub większą liczbę razy (przy czym ta liczba jest jak najmniejsza). | a.*?c |
"abc" w systemie "abcbc" |
+? |
Dopasowuje poprzedni element raz lub większą liczbę razy (przy czym ta liczba jest jak najmniejsza). | "be+?" |
"be" in , "be" in "been" "bent" |
?? |
Dopasowuje poprzedni element zero lub jeden raz (przy czym liczba dopasowań jest jak najmniejsza). | "rai??" |
"ra" w systemie "rain" |
{ n }? |
Pasuje do poprzedniego elementu dokładnie n razy. | ",\d{3}?" |
",043" w "1,043.6" systemach , ",876" , ",543" i ",210" w "9,876,543,210" |
{ n ,}? |
Pasuje do poprzedniego elementu co najmniej n razy, ale jak najmniej raz. | "\d{2,}?" |
"166" , , "29" "1930" |
{ n , m }? |
Pasuje do poprzedniego elementu między n i m razy, ale jak najmniej. | "\d{3,5}?" |
"166" , "17668" "193" , "024" w "193024" |
Konstrukty grupowania wstecznego
Dopasowywanie wsteczne umożliwia kolejne identyfikacje uprzednio dopasowanego podwyrażenia w tym samym wyrażeniu regularnym. W poniższej tabeli wymieniono konstrukcje wnioskowania wstecznego obsługiwane przez wyrażenia regularne na platformie .NET. Aby uzyskać więcej informacji, zobacz Backreference Constructs (Konstrukcje wsteczne).
Konstrukcja dopasowywania wstecznego | opis | Wzorzec | Dopasowania |
---|---|---|---|
\ numer |
Dopasowanie wsteczne. Dopasowuje wartość numerowanego podwyrażenia. | (\w)\1 |
"ee" w systemie "seek" |
\k< nazwa > |
Nazwane dopasowanie wsteczne. Dopasowuje wartość nazwanego wyrażenia. | (?<char>\w)\k<char> |
"ee" w systemie "seek" |
Konstrukty naprzemienne
Konstrukcje zmiany modyfikują wyrażenie regularne, aby umożliwić dopasowanie typu albo/albo. Te konstrukcje obejmują elementy języka wyszczególnione w poniższej tabeli. Aby uzyskać więcej informacji, zobacz Konstrukcje zmiany.
Konstrukcje zmiany | opis | Wzorzec | Dopasowania |
---|---|---|---|
| |
Pasuje do dowolnego elementu oddzielonego znakiem pionowego paska (| ). |
th(e|is|at) |
"the" , "this" w "this is the day." |
(?( wyrażenie ) tak | Nie ) lub (?( wyrażenie ) tak ) |
Pasuje do wartości Tak, jeśli wzorzec wyrażenia regularnego wyznaczony przez wyrażenie jest zgodny; w przeciwnym razie pasuje do opcjonalnej części bez. Wyrażenie jest interpretowane jako asercji o zerowej szerokości. Aby uniknąć niejednoznaczności z nazwaną lub numerowaną grupą przechwytywania, możesz opcjonalnie użyć jawnej asercji, w następujący sposób: (?( (?= wyrażenie ) ) tak | Nie ) |
(?(A)A\d{2}\b|\b\d{3}\b) |
"A10" , "910" w "A10 C103 910" |
(?( nazwa ) tak | Nie ) lub (?( nazwa ) tak ) |
Pasuje tak , jeśli nazwa, nazwa lub numerowana grupa przechwytywania, ma dopasowanie; w przeciwnym razie pasuje do opcjonalnego nie. | (?<quoted>")?(?(quoted).+?"|\S+\s) |
"Dogs.jpg " , "\"Yiska playing.jpg\"" w "Dogs.jpg \"Yiska playing.jpg\"" |
Zastępstwa
Podstawienia są elementami języka wyrażeń regularnych, które są obsługiwane we wzorcach zamieniania. Aby uzyskać więcej informacji, zobacz Podstawianie. Metaznaki wymienione w poniższej tabeli są niepodzielnymi asercjami o zerowej szerokości.
Znak | opis | Wzorzec | Wzorzec zamieniania | Ciąg wejściowy | Ciąg wynikowy |
---|---|---|---|---|---|
$ numer |
Zastępuje podciąg zgodny z numerem grupy. | \b(\w+)(\s)(\w+)\b |
$3$2$1 |
"one two" |
"two one" |
${ nazwa } |
Zastępuje podciąg zgodny z nazwaną nazwą grupy. | \b(?<word1>\w+)(\s)(?<word2>\w+)\b |
${word2} ${word1} |
"one two" |
"two one" |
$$ |
Podstawia literał „$”. | \b(\d+)\s?USD |
$$$1 |
"103 USD" |
"$103" |
$& |
Podstawia kopię całego dopasowania. | \$?\d*\.?\d+ |
**$&** |
"$1.30" |
"**$1.30**" |
$` |
Podstawia cały tekst ciągu wejściowego przed dopasowaniem. | B+ |
$` |
"AABBCC" |
"AAAACC" |
$' |
Podstawia cały tekst ciągu wejściowego po dopasowaniu. | B+ |
$' |
"AABBCC" |
"AACCCC" |
$+ |
Podstawia ostatnią przechwyconą grupę. | B+(C+) |
$+ |
"AABBCCDD" |
"AACCDD" |
$_ |
Podstawia cały ciąg wejściowy. | B+ |
$_ |
"AABBCC" |
"AAAABBCCCC" |
Opcje wyrażeń regularnych
Można określić opcje sterujące sposobem, w jaki aparat wyrażeń regularnych interpretuje wzorzec wyrażenia regularnego. Wiele z tych opcji można określić w tekście (we wzorcu wyrażenia regularnego) lub jako jedną lub więcej RegexOptions stałych. W tym krótkim opisie wymieniono tylko opcje określane w tekście. Aby uzyskać więcej informacji na temat wbudowanych i RegexOptions opcji, zobacz artykuł Opcje wyrażeń regularnych.
Opcję określaną w tekście można określić na dwa sposoby:
- Przy użyciu innej konstrukcji
(?imnsx-imnsx)
, gdzie znak minus (-) przed opcją lub zestaw opcji wyłącza te opcje. Na przykład włącza(?i-mn)
dopasowywanie bez uwzględniania wielkości liter (i
), włącza tryb wielowierszowy (m
) i wyłącza funkcję przechwytywania nienazwanych grup (n
). Ta opcja jest stosowana do wzorca wyrażenia regularnego od czasu zdefiniowania opcji i działa do końca wzorca lub punktu, w którym inna konstrukcja odwróci działanie opcji. - Przy użyciu podexpressionu
)
konstrukcji(?imnsx-imnsx:
grupowania, który definiuje opcje tylko dla określonej grupy.
Aparat wyrażeń regularnych platformy .NET obsługuje następujące opcje wbudowane:
Opcja | Opis | Wzorzec | Dopasowania |
---|---|---|---|
i |
Używa dopasowywania bez uwzględniania wielkości liter. | \b(?i)a(?-i)a\w+\b |
"aardvark" , "aaaAuto" w "aardvark AAAuto aaaAuto Adam breakfast" |
m |
Używa trybu wielowierszowego. ^ i $ dopasuj początek i koniec wiersza zamiast początku i końca ciągu. |
Aby zapoznać się z przykładem, zobacz sekcję "Tryb wielowierszowy" w obszarze Opcje wyrażeń regularnych. | |
n |
Nie przechwytuje nienazwanych grup. | Aby zapoznać się z przykładem, zobacz sekcję "Jawne przechwytywanie tylko" w opcjach wyrażeń regularnych. | |
s |
Używa trybu jednowierszowego. | Aby zapoznać się z przykładem, zobacz sekcję "Tryb jednowierszowy" w obszarze Opcje wyrażeń regularnych. | |
x |
Ignoruje niepoprzedzony znakiem ucieczki znak odstępu we wzorcu wyrażenia regularnego. | \b(?x) \d+ \s \w+ |
"1 aardvark" , "2 cats" w "1 aardvark 2 cats IV centurions" |
Różne konstruktory
Konstrukcje inne służą do modyfikowania wzorca wyrażenia regularnego lub dostarczania informacji na jego temat. W poniższej tabeli wymieniono różne konstrukcje obsługiwane przez platformę .NET. Aby uzyskać więcej informacji, zobacz Różne konstrukcje.
Konstrukcja | Definicja | Przykład |
---|---|---|
(?imnsx-imnsx) |
Ustawia lub wyłącza opcje, takie jak bez uwzględniania wielkości liter w środku wzorca. Aby uzyskać więcej informacji, zobacz Opcje wyrażeń regularnych. | \bA(?i)b\w+\b pasuje "ABA" do elementu , "Able" w "ABA Able Act" |
(?# komentarz ) |
Komentarz w tekście. Komentarz kończy się przy pierwszym nawiasie zamykającym. | \bA(?#Matches words starting with A)\w+\b |
# [do końca wiersza] |
Komentarz trybu X. Komentarz zaczyna się od niewyobrażanego # i nadal na końcu linii. |
(?x)\bA\w+\b#Matches words starting with A |