Regex.Escape(String) Regex.Escape(String) Regex.Escape(String) Regex.Escape(String) Method

Определение

Преобразует минимальный набор символов (\, *, +, ?, |, {, [, (,), ^, $,., # и пробел), заменяя их escape-кодами.Escapes a minimal set of characters (\, *, +, ?, |, {, [, (,), ^, $, ., #, and white space) by replacing them with their escape codes. При этом обработчику регулярных выражений дается команда интерпретировать эти символы буквально, а не как метасимволы.This instructs the regular expression engine to interpret these characters literally rather than as metacharacters.

public:
 static System::String ^ Escape(System::String ^ str);
public static string Escape (string str);
static member Escape : string -> string
Public Shared Function Escape (str As String) As String

Параметры

str
String String String String

Входная строка, содержащая преобразуемый текст.The input string that contains the text to convert.

Возвраты

Строка символов с метасимволами, приведенными в преобразованную форму.A string of characters with metacharacters converted to their escaped form.

Исключения

Примеры

В следующем примере из текста извлекаются комментарии.The following example extracts comments from text. Предполагается, что комментарии разделяются символом начала комментария и символом конца комментария, выбранным пользователем.It assumes that the comments are delimited by a begin comment symbol and an end comment symbol that is selected by the user. Поскольку символы комментария должны интерпретироваться буквально, они передаются Escape в метод, чтобы убедиться, что они не могут быть правильно интерпретированы как метасимволы.Because the comment symbols are to be interpreted literally, they are passed to the Escape method to ensure that they cannot be misinterpreted as metacharacters. Кроме того, в примере явно проверяется, является ли введенный пользователем символ завершающего комментария закрывающей квадратной скобкой (]) или фигурной скобкой (}).In addition, the example explicitly checks whether the end comment symbol entered by the user is a closing bracket (]) or brace (}). Если это так, то символ обратной\косой черты () добавляется в начало квадратной скобки или скобки, чтобы интерпретироваться буквально.If it is, a backslash character (\) is prepended to the bracket or brace so that it is interpreted literally. Обратите внимание, что в примере Match.Groups также используется коллекция для вывода только комментария, а не комментария вместе с его открывающими и закрывающими символами комментария.Note that the example also uses the Match.Groups collection to display the comment only, rather than the comment together with its opening and closing comment symbols.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      ConsoleKeyInfo keyEntered;
      char beginComment, endComment;
      Console.Write("Enter begin comment symbol: ");
      keyEntered = Console.ReadKey();
      beginComment = keyEntered.KeyChar;
      Console.WriteLine();
      
      Console.Write("Enter end comment symbol: ");
      keyEntered = Console.ReadKey();
      endComment = keyEntered.KeyChar;
      Console.WriteLine();
      
      string input = "Text [comment comment comment] more text [comment]";
      string pattern;
      pattern = Regex.Escape(beginComment.ToString()) + @"(.*?)";
      string endPattern = Regex.Escape(endComment.ToString());
      if (endComment == ']' || endComment == '}') endPattern = @"\" + endPattern;
      pattern += endPattern;
      MatchCollection matches = Regex.Matches(input, pattern);
      Console.WriteLine(pattern);
      int commentNumber = 0;
      foreach (Match match in matches)
         Console.WriteLine("{0}: {1}", ++commentNumber, match.Groups[1].Value);
         
   }
}
// The example shows possible output from the example:
//       Enter begin comment symbol: [
//       Enter end comment symbol: ]
//       \[(.*?)\]
//       1: comment comment comment
//       2: comment
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim keyEntered As ConsoleKeyInfo
      Dim beginComment, endComment As Char
      Console.Write("Enter begin comment symbol: ")
      keyEntered = Console.ReadKey()
      beginComment = keyEntered.KeyChar
      Console.WriteLine()
      
      Console.Write("Enter end comment symbol: ")
      keyEntered = Console.ReadKey()
      endComment = keyEntered.KeyChar
      Console.WriteLine()
      
      Dim input As String = "Text [comment comment comment] more text [comment]"
      Dim pattern As String = Regex.Escape(beginComment.ToString()) + "(.*?)"
      Dim endPattern As String = Regex.Escape(endComment.ToString())
      If endComment = "]"c OrElse endComment = "}"c Then endPattern = "\" + endPattern
      pattern += endPattern
      
      Dim matches As MatchCollection = Regex.Matches(input, pattern)
      Console.WriteLine(pattern)
      Dim commentNumber As Integer = 0
      For Each match As Match In matches
         commentNumber += 1
         Console.WriteLine("{0}: {1}", commentNumber, match.Groups(1).Value)
      Next         
   End Sub
End Module
' The example shows possible output from the example:
'       Enter begin comment symbol: [
'       Enter end comment symbol: ]
'       \[(.*?)\]
'       1: comment comment comment
'       2: comment

Комментарии

EscapeПреобразует строку, чтобы обработчик регулярных выражений мог интерпретировать все метасимволы, которые он может содержать как символьные литералы.Escape converts a string so that the regular expression engine will interpret any metacharacters that it may contain as character literals. Например, рассмотрим регулярное выражение, которое предназначено для извлечения комментариев, разделенных прямыми открывающими и закрывающими квадратными скобками ([и]) из текста.For example, consider a regular expression that is designed to extract comments that are delimited by straight opening and closing brackets ([ and ]) from text. В следующем примере регулярное выражение "[(. *?)]" интерпретируется как класс символов.In the following example, the regular expression "[(.*?)]" is interpreted as a character class. Вместо того, чтобы сопоставлять комментарии, внедренные во входной текст, регулярное выражение соответствует каждой открывающей или закрывающей круглой скобке, точке, звездочке или вопросительному знаку.Rather than matching comments embedded in the input text, the regular expression matches each opening or closing parenthesis, period, asterisk, or question mark.

string pattern = "[(.*?)]"; 
string input = "The animal [what kind?] was visible [by whom?] from the window.";

MatchCollection matches = Regex.Matches(input, pattern);
int commentNumber = 0;
Console.WriteLine("{0} produces the following matches:", pattern);
foreach (Match match in matches)
   Console.WriteLine("   {0}: {1}", ++commentNumber, match.Value);  

// This example displays the following output:
//       [(.*?)] produces the following matches:
//          1: ?
//          2: ?
//          3: .
Dim pattern As String = "[(.*?)]" 
Dim input As String = "The animal [what kind?] was visible [by whom?] from the window."

Dim matches As MatchCollection = Regex.Matches(input, pattern)
Dim commentNumber As Integer = 0
Console.WriteLine("{0} produces the following matches:", pattern)
For Each match As Match In matches
   commentNumber += 1
   Console.WriteLine("{0}: {1}", commentNumber, match.Value)       
Next      
' This example displays the following output:
'       1: ?
'       2: ?
'       3: .

Однако если открывающая квадратная скобка передается Escape в метод, то регулярное выражение завершается с совпадающими комментариями, внедренными во входную строку.However, if the opening bracket is escaped by passing it to the Escape method, the regular expression succeeds in matching comments that are embedded in the input string. Это показано в следующем примере.The following example illustrates this.

string pattern = Regex.Escape("[") + "(.*?)]"; 
string input = "The animal [what kind?] was visible [by whom?] from the window.";

MatchCollection matches = Regex.Matches(input, pattern);
int commentNumber = 0;
Console.WriteLine("{0} produces the following matches:", pattern);
foreach (Match match in matches)
   Console.WriteLine("   {0}: {1}", ++commentNumber, match.Value);  

// This example displays the following output:
//       \[(.*?)] produces the following matches:
//          1: [what kind?]
//          2: [by whom?]
Dim pattern As String = Regex.Escape("[") + "(.*?)]" 
Dim input As String = "The animal [what kind?] was visible [by whom?] from the window."

Dim matches As MatchCollection = Regex.Matches(input, pattern)
Dim commentNumber As Integer = 0
Console.WriteLine("{0} produces the following matches:", pattern)
For Each match As Match In matches
   commentNumber += 1
   Console.WriteLine("   {0}: {1}", commentNumber, match.Value)  
Next
' This example displays the following output:
'       \[(.*?)] produces the following matches:
'          1: [what kind?]
'          2: [by whom?]

В регулярном выражении, которое определено с помощью статического текста, символы, которые должны интерпретироваться буквально, а не как метасимволы, могут быть экранированы перед ними с помощью символа\обратной косой черты () Escape , а также путем вызова метода.In a regular expression that is defined by using static text, characters that are to be interpreted literally rather than as metacharacters can be escaped by preceding them with a backslash symbol (\) as well as by calling the Escape method. В регулярном выражении, которое определяется динамически с помощью символов, неизвестных во время разработки, вызов Escape метода особенно важен, чтобы механизм регулярных выражений интерпретирует отдельные символы как литералы, а не чем метасимволы.In a regular expression that is defined dynamically using characters that are not known at design time, calling the Escape method is particularly important to ensure that the regular expression engine interprets individual characters as literals rather than as metacharacters.

Примечание

Если шаблон регулярного выражения содержит либо символ решетки (#), либо символы-разделители, они должны быть экранированы, если входной текст анализируется с RegexOptions.IgnorePatternWhitespace включенным параметром.If a regular expression pattern includes either the number sign (#) or literal white-space characters, they must be escaped if input text is parsed with the RegexOptions.IgnorePatternWhitespace option enabled.

Хотя Escape метод экранирует прямой Открытие квадратная скобка ([) и открыв скобки ({}), он не экранирует их соответствующий закрывающий символов (] и}).While the Escape method escapes the straight opening bracket ([) and opening brace ({) characters, it does not escape their corresponding closing characters (] and }). В большинстве случаев их экранирование не требуется.In most cases, escaping these is not necessary. Если закрывающей квадратной скобке или фигурной скобке не предшествует соответствующий открывающий символ, обработчик регулярных выражений интерпретирует его буквально.If a closing bracket or brace is not preceded by its corresponding opening character, the regular expression engine interprets it literally. Если открывающая квадратная скобка или фигурная скобка интерпретируется как метасимвол, обработчик регулярных выражений интерпретирует первый соответствующий закрывающий символ как метасимвол.If an opening bracket or brace is interpreted as a metacharacter, the regular expression engine interprets the first corresponding closing character as a metacharacter. Если это не требуемое поведение, закрывающую квадратную скобку или фигурную скобку следует заключать в escape\-последовательность, явно добавив символ обратной косой черты ().If this is not the desired behavior, the closing bracket or brace should be escaped by explicitly prepending the backslash (\) character. Иллюстрации см. в разделе "пример".For an illustration, see the Example section.

Применяется к

Дополнительно