Udostępnij za pośrednictwem


Znaki specjalne w wyrażeniach regularnych

Ukośnik odwrotny (\) w wyrażeniu regularnym wskazuje jedną z następujących wartości:

  • Znak, który następuje po nim, jest znakiem specjalnym, jak pokazano w tabeli w poniższej sekcji. Na przykład \b jest to kotwica wskazująca, że dopasowanie wyrażenia regularnego powinno rozpoczynać się na granicy wyrazu, \t reprezentuje kartę i \x020 reprezentuje spację.

  • Znak, który w przeciwnym razie będzie interpretowany jako nieobejmowany konstrukcja języka, powinien być interpretowany dosłownie. Na przykład nawias klamrowy ({) rozpoczyna definicję kwantyfikatora, ale ukośnik odwrotny, po którym następuje nawias klamrowy (\{) wskazuje, że aparat wyrażeń regularnych powinien być zgodny z nawiasem klamrowym. Podobnie pojedynczy ukośnik odwrotny oznacza początek konstrukcji języka ucieczki, ale dwa ukośniki odwrotne (\\) wskazują, że aparat wyrażeń regularnych powinien być zgodny z ukośnikiem odwrotnym.

Uwaga

Znaki ucieczki są rozpoznawane w wzorcach wyrażeń regularnych, ale nie w wzorcach zastępczych.

Znaki ucieczki na platformie .NET

W poniższej tabeli wymieniono znaki ucieczki obsługiwane przez wyrażenia regularne na platformie .NET.

Znak lub sekwencja opis
Wszystkie znaki z wyjątkiem następujących:

. $ ^ { [ ( | ) * + ? \
Znaki inne niż wymienione w kolumnie Znak lub sekwencja nie mają specjalnego znaczenia w wyrażeniach regularnych; pasują do siebie.

Znaki zawarte w kolumnie Znak lub sekwencja są specjalnymi elementami języka wyrażeń regularnych. Aby dopasować je w wyrażeniu regularnym, należy je użyć jako ucieczki lub dołączyć do grupy znaków dodatnich. Na przykład wyrażenie \$\d+ regularne lub [$]\d+ pasuje do "$1200".
\a Pasuje do znaku \u0007dzwonka (alarmu), .
\b [W klasie znaków character_group] dopasowywuje backspace, \u0008. (Zobacz Klasy znaków). Poza klasą \b znaków jest kotwica zgodna z granicą słowa. (Zobacz Kotwice).
\t Pasuje do karty , \u0009.
\r Pasuje do powrotu karetki, \u000D. Należy pamiętać, że \r nie jest to odpowiednik znaku nowego wiersza, \n.
\v Pasuje do karty pionowej, \u000B.
\f Pasuje do źródła danych formularza, \u000C.
\n Pasuje do nowego wiersza, \u000A.
\e Pasuje do ucieczki, \u001B.
\nnn Dopasuje znak ASCII, gdzie nnn składa się z dwóch lub trzech cyfr reprezentujących kod znaków ósemkowej. Na przykład \040 reprezentuje znak spacji. Ta konstrukcja jest interpretowana jako wnioskowanie wsteczne, jeśli ma tylko jedną cyfrę (na przykład \2) lub jeśli odpowiada liczbie grupy przechwytywania. (Zobacz Konstrukcje wnioskowania wstecznego).
\xnn Pasuje do znaku ASCII, gdzie nn jest dwucyfrowym kodem szesnastkowym.
\cX Pasuje do znaku kontrolki ASCII, gdzie X jest literą znaku kontrolki. Na przykład to \cC CTRL-C.
\unnnn Pasuje do jednostki kodu UTF-16, której wartość jest nnnn szesnastkowa. Uwaga: ucieczka perl 5 znaków używana do określania Unicode nie jest obsługiwana przez platformę .NET. Znak ucieczki perl 5 ma postać \x{####…}, gdzie #### jest serią cyfr szesnastkowe. Zamiast tego użyj \unazwy nnnn.
\ Gdy następuje znak, który nie jest rozpoznawany jako znak ucieczki, pasuje do tego znaku. Na przykład \* pasuje do gwiazdki (*) i jest taka sama jak \x2A.

Przykład

Poniższy przykład ilustruje użycie ucieczki znaków w wyrażeniu regularnym. Analizuje ciąg zawierający nazwy największych miast na świecie i ich populacji w 2009 roku. Każda nazwa miasta jest oddzielona od swojej populacji kartą (\t) lub pionowym paskiem (| lub \u007c). Poszczególne miasta i ich populacje są oddzielone od siebie zwrotem karetki i karmą liniową.

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, Türkiye|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, Türkiye     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, Türkiye|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, Türkiye     11,372,613

Wyrażenie \G(.+)[\t\u007c](.+)\r?\n regularne jest interpretowane, jak pokazano w poniższej tabeli.

Wzorzec opis
\G Rozpocznij mecz, w którym zakończyło się ostatnie dopasowanie.
(.+) Dopasuj dowolny znak co najmniej jeden raz. Jest to pierwsza grupa przechwytywania.
[\t\u007c] Dopasuj kartę (\t) lub pionowy pasek (|).
(.+) Dopasuj dowolny znak co najmniej jeden raz. Jest to druga grupa przechwytywania.
\r?\n Dopasuj zero lub jedno wystąpienie powrotu karetki, po którym następuje nowy wiersz.

Zobacz też