Znaki specjalne w wyrażeniach regularnychCharacter Escapes in Regular Expressions

Ukośnik odwrotny (\) w wyrażeniu regularnym wskazuje jedną z następujących wartości:The backslash (\) in a regular expression indicates one of the following:

  • Znak, który następuje po nim jest znakiem specjalnym, jak pokazano w tabeli w poniższej sekcji.The character that follows it is a special character, as shown in the table in the following section. Na przykład \b jest zakotwiczeniem wskazującym, że dopasowanie wyrażenia regularnego powinno rozpoczynać się od granicy słowa, \t reprezentuje kartę, a \x020 reprezentuje spację.For example, \b is an anchor that indicates that a regular expression match should begin on a word boundary, \t represents a tab, and \x020 represents a space.

  • Znak, który w przeciwnym razie mógłby być interpretowany jako nieucieczka konstrukcja języka, należy interpretować dosłownie.A character that otherwise would be interpreted as an unescaped language construct should be interpreted literally. Na przykład nawiasy klamrowe ({) rozpoczynają definicję kwantyfikatora, ale ukośnik odwrotny, po którym następuje nawias klamrowy (\{), wskazuje, że aparat wyrażeń regularnych powinien pasować do nawiasu klamrowego.For example, a brace ({) begins the definition of a quantifier, but a backslash followed by a brace (\{) indicates that the regular expression engine should match the brace. Podobnie pojedynczy ukośnik odwrotny oznacza początek trójwymiarowej konstrukcji języka, ale dwa ukośniki odwrotne (\\) wskazują, że aparat wyrażeń regularnych powinien być zgodny z ukośnikiem odwrotnym.Similarly, a single backslash marks the beginning of an escaped language construct, but two backslashes (\\) indicate that the regular expression engine should match the backslash.

Uwaga

Znaki ucieczki są rozpoznawane w wzorcach wyrażeń regularnych, ale nie w wzorcach zastępczych.Character escapes are recognized in regular expression patterns but not in replacement patterns.

Znak ucieczki w programie .NETCharacter Escapes in .NET

W poniższej tabeli wymieniono znaki ucieczki obsługiwane przez wyrażenia regularne w programie .NET.The following table lists the character escapes supported by regular expressions in .NET.

Znak lub sekwencjaCharacter or sequence OpisDescription
Wszystkie znaki z wyjątkiem następujących:All characters except for the following:

.. $ ^ { [ ( | ) * + ?$ ^ { [ ( | ) * + ? \
Znaki inne niż wymienione w kolumnie znak lub sekwencja nie mają specjalnego znaczenia w wyrażeniach regularnych; są one zgodne.Characters other than those listed in the Character or sequence column have no special meaning in regular expressions; they match themselves.

Znaki zawarte w znakach lub kolumnie sekwencji są specjalnymi elementami języka wyrażeń regularnych.The characters included in the Character or sequence column are special regular expression language elements. Aby można było dopasować je w wyrażeniu regularnym, muszą one być zmienione lub dołączone do grupy znaków pozytywnych.To match them in a regular expression, they must be escaped or included in a positive character group. Na przykład wyrażenie regularne \$\d+ lub [$]\d+ pasuje do "$1200".For example, the regular expression \$\d+ or [$]\d+ matches "$1200".
\a Dopasowuje znak dzwonka (alarm), \u0007.Matches a bell (alarm) character, \u0007.
\b W klasie znaków [character_group] dopasowuje spację \u0008.In a [character_group] character class, matches a backspace, \u0008. (Zobacz klasy znaków). Poza klasą znaku \b jest kotwicą pasującą do granicy słowa.(See Character Classes.) Outside a character class, \b is an anchor that matches a word boundary. (Zobacz kotwice).(See Anchors.)
\t Dopasowuje kartę, \u0009.Matches a tab, \u0009.
\r Dopasowuje znak powrotu karetki, \u000D.Matches a carriage return, \u000D. Należy zauważyć, że \r nie jest odpowiednikiem znaku nowego wiersza, \n.Note that \r is not equivalent to the newline character, \n.
\v Dopasowuje zakładkę pionową \u000B.Matches a vertical tab, \u000B.
\f Dopasowuje kanał informacyjny formularza, \u000C.Matches a form feed, \u000C.
\n Dopasowuje nowy wiersz \u000A.Matches a new line, \u000A.
\e Dopasowuje znak ucieczki \u001B.Matches an escape, \u001B.
\ nnn\ nnn Dopasowuje znak ASCII, gdzie nnn składa się z dwóch lub trzech cyfr reprezentujących kod znaku ósemkowego.Matches an ASCII character, where nnn consists of two or three digits that represent the octal character code. Na przykład, \040 reprezentuje znak spacji.For example, \040 represents a space character. Ta konstrukcja jest interpretowana jako odwołanie wsteczne, jeśli ma tylko jedną cyfrę (na przykład \2) lub jeśli odpowiada liczbie grupy przechwytywania.This construct is interpreted as a backreference if it has only one digit (for example, \2) or if it corresponds to the number of a capturing group. (Zobacz konstrukcje odwołań wstecznych).(See Backreference Constructs.)
\x NN\x nn Dopasowuje znak ASCII, gdzie NN jest dwucyfrowym kodem znaku szesnastkowego.Matches an ASCII character, where nn is a two-digit hexadecimal character code.
\c X\c X Dopasowuje znak kontrolny ASCII, gdzie X jest literą znaku kontrolnego.Matches an ASCII control character, where X is the letter of the control character. Na przykład \cC to CTRL-C.For example, \cC is CTRL-C.
\u nnnn\u nnnn Dopasowuje jednostkę kodu UTF-16, której wartość to nnnn szesnastkowa.Matches a UTF-16 code unit whose value is nnnn hexadecimal. Uwaga: Język Perl 5 znaku ucieczki, który jest używany do określenia Unicode, nie jest obsługiwany przez platformę .NET.Note: The Perl 5 character escape that is used to specify Unicode is not supported by .NET. Znak w języku Perl 5 ma postać \x{ #### …}, gdzie #### to seria cyfr szesnastkowych.The Perl 5 character escape has the form \x{####…}, where #### is a series of hexadecimal digits. Zamiast tego należy użyć \unnnn.Instead, use \unnnn.
\ Gdy następuje znak, który nie jest rozpoznawany jako znak ucieczki, dopasowuje ten znak.When followed by a character that is not recognized as an escaped character, matches that character. Na przykład \* pasuje do gwiazdki (*) i jest taka sama jak \x2A.For example, \* matches an asterisk (*) and is the same as \x2A.

PrzykładAn Example

Poniższy przykład ilustruje użycie znaku ucieczki w wyrażeniu regularnym.The following example illustrates the use of character escapes in a regular expression. Analizuje ciąg, który zawiera nazwy największych miast i ich populacje w 2009.It parses a string that contains the names of the world's largest cities and their populations in 2009. Nazwy poszczególnych miast są oddzielone od populacji za pomocą karty (\t) lub kreski pionowej| (lub \u007c).Each city name is separated from its population by a tab (\t) or a vertical bar (| or \u007c). Poszczególne miasta i ich populacje są oddzielone od siebie przez powrotu karetki i wysuwu wiersza.Individual cities and their populations are separated from each other by a carriage return and line feed.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string delimited = @"\G(.+)[\t\u007c](.+)\r?\n";
      string input = "Mumbai, India|13,922,125\t\n" + 
                            "Shanghai, China\t13,831,900\n" + 
                            "Karachi, Pakistan|12,991,000\n" + 
                            "Delhi, India\t12,259,230\n" + 
                            "Istanbul, Turkey|11,372,613\n";
      Console.WriteLine("Population of the World's Largest Cities, 2009");
      Console.WriteLine();
      Console.WriteLine("{0,-20} {1,10}", "City", "Population");
      Console.WriteLine();
      foreach (Match match in Regex.Matches(input, delimited))
         Console.WriteLine("{0,-20} {1,10}", match.Groups[1].Value, 
                                            match.Groups[2].Value);
   }
}
// The example displays the following output:
//       Population of the World's Largest Cities, 2009
//       
//       City                 Population
//       
//       Mumbai, India        13,922,125
//       Shanghai, China      13,831,900
//       Karachi, Pakistan    12,991,000
//       Delhi, India         12,259,230
//       Istanbul, Turkey     11,372,613
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim delimited As String = "\G(.+)[\t\u007c](.+)\r?\n"
      Dim input As String = "Mumbai, India|13,922,125" + vbCrLf + _
                            "Shanghai, China" + vbTab + "13,831,900" + vbCrLf + _
                            "Karachi, Pakistan|12,991,000" + vbCrLf + _
                            "Delhi, India" + vbTab + "12,259,230" + vbCrLf + _
                            "Istanbul, Turkey|11,372,613" + vbCrLf
      Console.WriteLine("Population of the World's Largest Cities, 2009")
      Console.WriteLine()
      Console.WriteLine("{0,-20} {1,10}", "City", "Population")
      Console.WriteLine()
      For Each match As Match In Regex.Matches(input, delimited)
         Console.WriteLine("{0,-20} {1,10}", match.Groups(1).Value, _
                                            match.Groups(2).Value)
      Next                         
   End Sub
End Module
' The example displays the following output:
'       Population of the World's Largest Cities, 2009
'       
'       City                 Population
'       
'       Mumbai, India        13,922,125
'       Shanghai, China      13,831,900
'       Karachi, Pakistan    12,991,000
'       Delhi, India         12,259,230
'       Istanbul, Turkey     11,372,613

Wyrażenie regularne \G(.+)[\t|\u007c](.+)\r?\n jest interpretowane jak pokazano w poniższej tabeli.The regular expression \G(.+)[\t|\u007c](.+)\r?\n is interpreted as shown in the following table.

WzorzecPattern OpisDescription
\G Rozpocznij dopasowanie, gdzie zostało zakończone ostatnie dopasowanie.Begin the match where the last match ended.
(.+) Dopasowuje dowolny znak jeden lub więcej razy.Match any character one or more times. Jest to pierwsza grupa przechwytywania.This is the first capturing group.
[\t\u007c] Dopasowuje kartę (\t) lub pionowy pasek (|).Match a tab (\t) or a vertical bar (|).
(.+) Dopasowuje dowolny znak jeden lub więcej razy.Match any character one or more times. Jest to druga grupa przechwytywania.This is the second capturing group.
\r?\n Dopasowanie do zera lub jednego wystąpienia znaku powrotu karetki, po którym następuje nowy wiersz.Match zero or one occurrence of a carriage return followed by a new line.

Zobacz takżeSee also