Escape-знаки
Обратная косая черта (\) в регулярном выражении означает одно из следующего:
Следующий за ним знак является специальным символом, как показано в таблице в следующем разделе. Например \b — это привязка, указывающая, что сопоставление регулярного выражения должно начинаться на границе слова, \t представляет вкладку, а \x020 соответствует пробелу.
Символ, который в противном случае интерпретировался бы как неэкранированная языковая конструкция, следует интерпретировать буквально. Например, фигурная скобка ({) начинает определение квантификатора, однако обратная косая черта, за которой следует фигурная скобка (\{) указывает, что обработчик регулярных выражений должен искать саму фигурную скобку. Аналогичным образом одиночная обратная косая черта служит escape-символом, отмечающим начало языковой конструкции, а две обратные косые черты (\\) указывают, что обработчик регулярных выражений должен поставить им в соответствие обратную косую черту.
![]() |
---|
Escape-символы распознаются в шаблонах регулярных выражений, но не в шаблонах замены. |
Escape-символы в .NET Framework
В следующей таблице перечислены escape-последовательности, поддерживаемые регулярными выражениями платформы .NET Framework.
Символ или последовательность |
Описание |
---|---|
Все символы, за исключением следующих: . $ ^ { [ ( | ) * + ? \ |
Эти символы не имеют особого значения в регулярных выражениях и соответствуют сами себе. |
\a |
Соответствует символу колокольчика (будильника), \u0007. |
\b |
В классе символов [группа_символов] соответствует знаку 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 |
Соответствует символу Юникода, где nnnn — четырехзначная шестнадцатеричная кодовая точка. ![]()
Escape-символ из Perl 5, который используется для указания Юникода, не поддерживается в .NET Framework.Escape-символ из Perl 5 имеет форму \x{####…}, где ####… представляет последовательность шестнадцатеричных цифр.Взамен следует использовать \unnnn.
|
\ |
Со следующим знаком, который не распознается как escape-символ, соответствует этому знаку. Например, \* обозначает звездочку (*) и совпадает с \x2A. |
Пример
В следующем примере показано использование escape-последовательности в регулярном выражении. Он анализирует строку, содержащую имена крупнейших городов мира и их население в 2009 г. Название каждого города отделено от его населения символом табуляции (\t) или вертикальной чертой (| или \u007c). Отдельные города и их население разделяются друг от друга символами возврата каретки и перевода строки.
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 + _
"Dehli, 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
' Dehli, India 12,259,230
' Istanbul, Turkey 11,372,613
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" +
"Dehli, 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 displyas 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
// Dehli, India 12,259,230
// Istanbul, Turkey 11,372,613
Возможные интерпретации регулярного выражения \G(.+)[\t|\u007c](.+)\r?\n показаны в следующей таблице.
Шаблон |
Описание |
---|---|
\G |
Начать соответствие там, где заканчивается последнее соответствие. |
(.+) |
Поиск любого символа один или более раз. Это первая группа записи. |
[\t\u007c] |
Соответствует знаку табуляции (\t) или вертикальной черте (|). |
(.+) |
Поиск любого символа один или более раз. Это вторая группа записи. |
\r? \n |
Соответствует отсутствию или одному вхождению символа возврата каретки, за которым следует новая строка. |
См. также
Основные понятия
Элементы языка регулярных выражений
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Май 2010 |
Исправлен шаблон регулярного выражения. |
Обратная связь от клиента. |