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ć, aby uzyskać łatwe informacje:

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 Wzorce Jest zgodny z
\a Dopasowuje znak sygnału dźwiękowego, \u0007. \a "\u0007" w elemencie "Error!" + '\u0007'
\b W klasie znaków dopasowuje znak backspace, \u0008. [\b]{3,} "\b\b\b\b" w elemencie "\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 elemencie "\r\nThese are\ntwo lines."
\v Dopasowuje tabulator pionowy, \u000B. [\v]{2,} "\v\v\v" w elemencie "\v\v\v"
\f Dopasowuje znak wysuwu strony, \u000C. [\f]{2,} "\f\f\f" w elemencie "\f\f\f"
\n Dopasowuje znak nowego wiersza, \u000A. \r\n(\w+) "\r\nThese" w elemencie "\r\nThese are\ntwo lines."
\e Dopasowuje znak escape, \u001B. \e "\x001B" w elemencie "\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 taki sam jak , i \. jest taki sam 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 Wzorce Jest zgodny z
[character_group] Pasuje do dowolnego pojedynczego znaku w character_group. Domyślnie w dopasowaniu jest uwzględniana wielkość liter. [ae] "a" w elemencie "gray"

"a", "e" w "lane"
[^character_group] Negacja: pasuje do każdego pojedynczego znaku, który nie znajduje się w character_group. Domyślnie znaki w character_group są uwzględniane wielkości liter. [^aei] "r", "g""n" , w"reign"
[Pierwszym-Ostatnio] 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 elemencie "nave"

"ate" w elemencie "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 według nazwy. \P{Lu}

\P{IsCyrillic}
"i", "t""y" , w"City"

"e", "m" w "ДЖem"
\w Pasuje do dowolnego znaku słowa. \w "I", "D", "A", "1", "3" w "ID A1.3"
\W Dopasuje dowolny znak inny niż wyraz. \W " ", "." w "ID A1.3"
\s Dopasuje dowolny znak odstępu. \w\s "D " w elemencie "ID A1.3"
\S Dopasuje dowolny znak bez odstępu. \s\S " _" w elemencie "int __ctr"
\d Dopasuje dowolną cyfrę dziesiętną. \d "4" w elemencie "4 = IV"
\D Dopasuje dowolny znak inny 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 Wzorce Jest zgodny z
^ 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 elemencie "901-333-"
$ Domyślnie dopasowanie musi występować na końcu ciągu lub przed \n na końcu ciągu; w trybie wielowierszowym musi występować przed końcem wiersza lub przed \n na końcu wiersza. -\d{3}$ "-333" w elemencie "-901-333"
\A Dopasowanie musi wystąpić na początku ciągu. \A\d{3} "901" w elemencie "901-333-"
\Z Dopasowanie musi występować na końcu ciągu lub przed \n na końcu ciągu. -\d{3}\Z "-333" w elemencie "-901-333"
\z Dopasowanie musi wystąpić na końcu ciągu. -\d{3}\z "-333" w elemencie "-901-333"
\G Dopasowanie musi występować 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)" w"(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 Wzorce Jest zgodny z
(Subexpression) Przechwytuje dopasowane podwyrażenia i przypisuje mu liczbę porządkową (liczone od zera). (\w)\1 "ee" w elemencie "deep"
(?<Nazwa>Subexpression)
lub
(?'Nazwa'Subexpression)
Przechwytuje dopasowane podwyrażenie do nazwanej grupy. (?<double>\w)\k<double> "ee" w elemencie "deep"
(?<name1-name2>Subexpression)
lub
(?'name1-name2'Subexpression)
Określa definicję grupy równoważącej. Aby uzyskać więcej informacji, zobacz sekcję "Balancing Group Definition" (Równoważenie definicji grupy) w temacie Grouping Constructs (Konstrukcje grupowania). (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ "((1-3)*(3-1))" w elemencie "3+2^((1-3)*(3-1))"
(?:Subexpression) Definiuje nieprzechwytywaną grupę. Write(?:Line)? "WriteLine" w elemencie "Console.WriteLine()"

"Write" w elemencie "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"
in
"cats, dogs and some mice."
(?!Subexpression) Negatywna asercja wyprzedzająca o zerowej szerokości. \b\w+\b(?!.+and.+) "and", "some", "mice"
in
"cats, dogs and some mice."
(?<=Subexpression) Pozytywna asercja wsteczna o zerowej szerokości. \b\w+\b(?<=.+and.+)

———————————

\b\w+\b(?<=.+and.*)
"some", "mice"
in
"cats, dogs and some mice."
————————————
"and", "some", "mice"
in
"cats, dogs and some mice."
(?<!Subexpression) Negatywna asercja wsteczna o zerowej szerokości. \b\w+\b(?<!.+and.+)

———————————

\b\w+\b(?<!.+and.*)
"cats", "dogs", "and"
in
"cats, dogs and some mice."
————————————
"cats", "dogs"
in
"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ągnie wyrażenie lookaround, pobiera podciąg z bieżącej pozycji do początku (lookbehind) lub końca (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 pozytywna, czy negatywna asercja.

Lookaround Nazwa Funkcja
(?=check) Pozytywne spojrzenie Potwierdza, że to, co natychmiast następuje po bieżącym położeniu w ciągu jest "check"
(?<=check) Pozytywny wygląd 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żące położenie w ciągu, nie jest "check"

Po dopasowaniu grupy atomowe 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 atomowej 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 Quantifiers.

Kwantyfikator Opis Wzorce Jest zgodny z
* Dopasowuje poprzedni element zero lub większą liczbę razy. a.*c "abcbc" w elemencie "abcbc"
+ Dopasowuje poprzedni element co najmniej raz. "be+" "bee"in , "be" in "been""bent"
? Dopasowuje poprzedni element zero lub jeden raz. "rai?" "rai" w elemencie "rain"
{N} Dopasuje poprzedni element dokładnie n razy. ",\d{3}" ",043" in "1,043.6", ",876", ",543"i ",210" in "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 elemencie "193024"
*? Dopasowuje poprzedni element zero lub większą liczbę razy (przy czym ta liczba jest jak najmniejsza). a.*?c "abc" w elemencie "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 elemencie "rain"
{N}? Dopasuje poprzedni element dokładnie n razy. ",\d{3}?" ",043" in "1,043.6", ",876", ",543"i ",210" in "9,876,543,210"
{N,}? Dopasuj poprzedni element co najmniej n razy, ale jak najmniej raz. "\d{2,}?" "166", "29", "1930"
{N,M}? Dopasuje poprzedni element 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 wycofywania obsługiwane przez wyrażenia regularne na platformie .NET. Aby uzyskać więcej informacji, zobacz Konstrukcje wsteczne.

Konstrukcja dopasowywania wstecznego Opis Wzorce Jest zgodny z
\Numer Dopasowanie wsteczne. Dopasowuje wartość numerowanego podwyrażenia. (\w)\1 "ee" w elemencie "seek"
\k<Nazwa> Nazwane dopasowanie wsteczne. Dopasowuje wartość nazwanego wyrażenia. (?<char>\w)\k<char> "ee" w elemencie "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 Wzorce Jest zgodny z
| Dopasuje dowolny jeden element oddzielony znakiem pionowego paska (|). th(e|is|at) "the", "this" w "this is the day."
(?(Wyrażenie)Tak|Nr)
lub
(?(Wyrażenie)Tak)
Dopasowuje wartość tak , jeśli wzorzec wyrażenia regularnego wyznaczony przez wyrażenie jest zgodny; w przeciwnym razie pasuje do opcjonalnego braku części. 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|Nr)
(?(A)A\d{2}\b|\b\d{3}\b) "A10", "910" w "A10 C103 910"
(?(Nazwa)Tak|Nr)
lub
(?(Nazwa)Tak)
Dopasowuje wartość tak , jeśli nazwa, nazwa lub numerowana grupa przechwytywania, ma dopasowanie; w przeciwnym razie pasuje do opcjonalnego nr. (?<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 Wzorce Wzorzec zamieniania Ciąg wejściowy Ciąg wynikowy
$Numer Podstawi podciąg dopasowany przez numer 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 konstrukcji (?imnsx-imnsx:grupowaniapodrażenie), które definiuje opcje tylko dla określonej grupy.

Aparat wyrażeń regularnych platformy .NET obsługuje następujące opcje wbudowane:

Opcja Opis Wzorce Jest zgodny z
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 brak uwzględniania wielkości liter w środku wzorca. Aby uzyskać więcej informacji, zobacz Opcje wyrażeń regularnych. \bA(?i)b\w+\b dopasuj wartość "ABA", "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 # krajobrazu i kontynuuje koniec linii. (?x)\bA\w+\b#Matches words starting with A

Zobacz też