Escape-знаки в регулярных выражениях

Обратная косая черта (\) в регулярном выражении указывает одно из следующих элементов:

  • Следующий за ней символ является специальным, как показано в таблице в следующем разделе. Например, \b — это привязка, указывающая, что сопоставление регулярного выражения должно начинаться на границе слова, \t представляет знак табуляции, а \x020 соответствует пробелу.

  • Символ, который в противном случае интерпретировался бы как неэкранированная языковая конструкция, следует интерпретировать буквально. Например, с фигурной скобки ({) начинается определение квантификатора, однако обратная косая черта, за которой следует фигурная скобка, (\{) указывает, что обработчик регулярных выражений должен искать саму фигурную скобку. Аналогичным образом, одиночная обратная косая черта служит escape-символом, отмечающим начало языковой конструкции, а две обратные косые черты (\\) указывают, что обработчик регулярных выражений должен поставить им в соответствие обратную косую черту.

Примечание.

Escape-символы распознаются в шаблонах регулярных выражений, но не в шаблонах замены.

Escape-знаки в NET

В таблице ниже перечислены escape-последовательности, поддерживаемые регулярными выражениями в .NET.

Символ или последовательность Description
Все символы, за исключением следующих:

. $ ^ { [ ( | ) * + ? \
Символы, не перечисленные в столбце Символ или последовательность, не имеют особого значения в регулярных выражениях и соответствуют сами себе.

Символы, включенные в столбец Символ или последовательность, являются специальными языковыми элементами регулярных выражений. Для сопоставления с ними в регулярном выражении их необходимо экранировать или включить в положительную группу символов. Например, регулярное выражение \$\d+ или [$]\d+ соответствует "$1200".
\a Соответствует символу колокольчика (будильника), \u0007.
\b В классе символов [character_group] соответствует символу возврата на одну позицию назад с удалением символа (BACKSPACE), \u0008. (См. раздел Классы символов.) Вне класса символов — это привязка, \b которая соответствует границе слова. (См. раздел Привязки.)
\t Соответствует знаку табуляции, \u0009.
\r Соответствует знаку возврата каретки, \u000D. Учтите, что \r не эквивалентно символу новой строки \n.
\v Соответствует знаку вертикальной табуляции, \u000B.
\f Соответствует знаку перевода страницы, \u000C.
\n Соответствует знаку новой строки, \u000A.
\e Соответствует escape-символу, \u001B.
\nnn Соответствует символу ASCII, где nnn может содержать две или три цифры, представляющие восьмеричный код символа. Например, \040 соответствует символу пробела. Эта конструкция интерпретируется как обратная ссылка, если она содержит только одну цифру (например, \2) или соответствует номеру группы записи. (См. раздел Конструкции обратных ссылок.)
\xnn Соответствует символу ASCII, где nn — двузначный шестнадцатеричный код символа.
\cX Соответствует управляющему символу ASCII, где X — буква управляющего символа. Например, \cC означает CTRL-C.
\unnnn Соответствует элементу кода UTF-16, значение которого является шестнадцатеричным значением nnnn. Примечание. Escape-символ из Perl 5, который используется для указания Юникода, не поддерживается в .NET. Escape-символ из Perl 5 имеет форму \x{####…}, где #### — последовательность шестнадцатеричных цифр. Вместо этого используйте \unnnn.
\ Со следующим знаком, который не распознается как escape-символ, соответствует этому знаку. Например, \* обозначает звездочку (*) и совпадает с \x2A.

Пример

В приведенном ниже примере показано использование escape-последовательностей в регулярном выражении. В нем анализируется строка, содержащая названия крупнейших городов мира и их население в 2009 г. Каждое название города отделяется от его популяции по вкладке () или вертикальной полосе (\t| или \u007c). Отдельные города и их население разделяются символами возврата каретки и перевода строки.

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

Возможные интерпретации регулярного выражения \G(.+)[\t\u007c](.+)\r?\n показаны в следующей таблице.

Расписание Description
\G Начать сопоставление там, где закончилось последнее соответствие.
(.+) Сопоставление любого символа один или более раз. Это первая группа записи.
[\t\u007c] Сопоставление табуляции (\t) или вертикальной полосы (|).
(.+) Сопоставление любого символа один или более раз. Это вторая группа записи.
\r?\n Соответствует отсутствию или одному вхождению символа возврата каретки, за которым следует новая строка.

См. также