Regex.Escape(String) Methode

Definition

Escapet einen minimalen Zeichensatz (\, *, +, ?, |, {, [, (,), ^, $, ., #und Leerzeichen), indem sie durch ihre Escapecodes ersetzt werden. Damit wird die Engine für reguläre Ausdrücke angewiesen, diese Zeichen als Literale statt als Metazeichen zu interpretieren.

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

Parameter

str
String

Die Eingabezeichenfolge mit dem zu konvertierenden Text.

Gibt zurück

Eine Zeichenfolge, in der Metazeichen in die entsprechenden Escapecodes konvertiert wurden.

Ausnahmen

str ist null.

Beispiele

Im folgenden Beispiel werden Kommentare aus Text extrahiert. Es wird davon ausgegangen, dass die Kommentare durch ein Startkommentarsymbol und ein Vom Benutzer ausgewähltes Endkommentarsymbol getrennt sind. Da die Kommentarsymbole wörtlich interpretiert werden sollen, werden sie an die Escape -Methode übergeben, um sicherzustellen, dass sie nicht als Metazeichen falsch interpretiert werden können. Darüber hinaus wird im Beispiel explizit überprüft, ob das vom Benutzer eingegebene Endkommentarsymbol eine schließende Klammer (]) oder eine Klammer (}) ist. Wenn dies der Grund ist, wird der Klammer oder Klammer ein umgekehrter Schrägstrich (\) vorangestellt, sodass er wörtlich interpretiert wird. Beachten Sie, dass im Beispiel auch die Match.Groups Auflistung verwendet wird, um nur den Kommentar anzuzeigen, anstatt den Kommentar zusammen mit den Symbolen für öffnende und schließende Kommentare anzuzeigen.

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

Hinweise

Escape konvertiert eine Zeichenfolge, sodass die Engine für reguläre Ausdrücke alle Metazeichen, die sie enthalten kann, als Zeichenliterale interpretiert. Betrachten Sie beispielsweise einen regulären Ausdruck, der zum Extrahieren von Kommentaren konzipiert ist, die durch gerade öffnende und schließende Klammern ([ und ]) aus Text getrennt sind. Im folgenden Beispiel wird der reguläre Ausdruck "[(.*?)]" als Zeichenklasse interpretiert. Anstelle der im Eingabetext eingebetteten Kommentare entspricht der reguläre Ausdruck jeder öffnenden oder schließenden Klammer, jedem Punkt, sternchen oder Fragezeichen.

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: .

Wenn die öffnende Klammer jedoch durch Übergeben an die Escape -Methode mit einem Escapezeichen versehen wird, kann der reguläre Ausdruck in übereinstimmenden Kommentaren erfolgreich sein, die in die Eingabezeichenfolge eingebettet sind. Dies wird anhand des folgenden Beispiels veranschaulicht.

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?]

In einem regulären Ausdruck, der mithilfe von statischem Text definiert wird, können Zeichen, die wörtlich und nicht als Metazeichen interpretiert werden sollen, durch Vorangehen mit einem umgekehrten Schrägstrichsymbol (\) und durch Aufrufen der Escape -Methode mit Escapezeichen versehen werden. In einem regulären Ausdruck, der dynamisch mit Zeichen definiert wird, die zur Entwurfszeit nicht bekannt sind, ist das Aufrufen der Escape Methode besonders wichtig, um sicherzustellen, dass die Engine für reguläre Ausdrücke einzelne Zeichen als Literale und nicht als Metazeichen interpretiert.

Hinweis

Wenn ein Muster eines regulären Ausdrucks entweder das Zahlenzeichen (#) oder literale Leerzeichen enthält, müssen sie mit Escapezeichen versehen werden, wenn Eingabetext mit aktivierter RegexOptions.IgnorePatternWhitespace Option analysiert wird.

Während der Escape -Methode versieht gerade Klammer ([) öffnen und geschweifte Klammer ({)-Zeichen, es ist nicht mit Escapezeichen versehen die entsprechenden Zeichen schließen (] und}). In den meisten Fällen ist es nicht erforderlich, diese zu entkommen. Wenn einer schließenden Klammer oder Klammer nicht das entsprechende öffnende Zeichen vorangestellt ist, interpretiert die Engine für reguläre Ausdrücke es wörtlich. Wenn eine öffnende Klammer oder Klammer als Metazeichen interpretiert wird, interpretiert die Engine für reguläre Ausdrücke das erste entsprechende Schlusszeichen als Metazeichen. Wenn dies nicht das gewünschte Verhalten ist, sollte die schließende Klammer oder Klammer durch explizites Voranstellen des umgekehrten Schrägstrichs (\) mit einem Escapezeichen versehen werden. Eine Abbildung finden Sie im Abschnitt Beispiel.

Gilt für:

Weitere Informationen