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 ) или соответствует номеру группы записи. (См. раздел Конструкции обратных ссылок.) |
\x nn |
Соответствует символу ASCII, где nn — двузначный шестнадцатеричный код символа. |
\c X |
Соответствует управляющему символу ASCII, где X — буква управляющего символа. Например, \cC означает CTRL-C. |
\u nnnn |
Соответствует элементу кода UTF-16, значение которого является шестнадцатеричным значением nnnn. Примечание. Escape-символ из Perl 5, который используется для указания Юникода, не поддерживается в .NET. Escape-символ из Perl 5 имеет форму \x{ ####…} , где ####… — последовательность шестнадцатеричных цифр. Вместо этого используйте \u nnnn. |
\ |
Со следующим знаком, который не распознается как 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 |
Соответствует отсутствию или одному вхождению символа возврата каретки, за которым следует новая строка. |