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 \u0007 dzwonka (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). |
\x nn |
Pasuje do znaku ASCII, gdzie nn jest dwucyfrowym kodem szesnastkowym. |
\c X |
Pasuje do znaku kontrolki ASCII, gdzie X jest literą znaku kontrolki. Na przykład to \cC CTRL-C. |
\u nnnn |
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 \u nazwy 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. |