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"
\xNn 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"
\cX

\cx
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)
\uNnnn 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{name} 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{name} 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"
(?<podwyraż nazwy>)
lub
(?'podwyraż nazwy')
Przechwytuje dopasowane podwyrażenie do nazwanej grupy. (?<double>\w)\k<double> "ee" w systemie "deep"
(?<name1 name1 subexpression (nazwa1-) subexpression (>podexpression))
lub
(?'name1 name1 subexpression (nazwa1-) subexpression ('podexpression))
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" Cala"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<name> 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"
${name} 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 konstrukcji(?imnsx-imnsx) różnej, 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

Zobacz też