Regex.Escape(String) Yöntem

Tanım

En düşük karakter kümesinden (\, *, +, ?, |, {, [, (,), ^, $, ., #ve boşluk) kaçış kodlarıyla değiştirerek kaçış karakteri ekler. Bu, normal ifade altyapısına bu karakterleri meta karakterler yerine tam anlamıyla yorumlamasını emreder.

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

Parametreler

str
String

Dönüştürülecek metni içeren giriş dizesi.

Döndürülenler

Meta karakterlerin kaçış biçimine dönüştürüldüğü bir karakter dizesi.

Özel durumlar

str, null değeridir.

Örnekler

Aşağıdaki örnekte metinden açıklamalar ayıklanır. Açıklamaların bir başlangıç açıklaması simgesi ve kullanıcı tarafından seçilen bir bitiş açıklaması simgesiyle sınırlandırıldığını varsayar. Açıklama simgelerinin tam anlamıyla yorumlanması gerektiğinden Escape , meta karakter olarak yanlış yorumlanamayacaklarından emin olmak için yöntemine geçirilir. Ayrıca örnek, kullanıcı tarafından girilen son açıklama simgesinin bir kapanış köşeli ayracı (]) veya ayraç (}) olup olmadığını açıkça denetler. Bu durumda, köşeli ayraç veya ayraç içine bir ters eğik çizgi karakteri (\) eklenir ve böylece tam olarak yorumlanır. Örneğin, açıklamayı Match.Groups açma ve kapatma açıklama simgeleriyle birlikte görüntülemek yerine yalnızca açıklamayı görüntülemek için koleksiyonunu da kullandığını unutmayın.

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

Açıklamalar

Escape normal ifade altyapısının karakter sabit değerleri olarak içerebileceği meta karakter karakterlerini yorumlayabilmesi için bir dizeyi dönüştürür. Örneğin, metinden düz açma ve kapatma köşeli ayraçları ([ ve ]) ile sınırlandırılmış açıklamaları ayıklamak için tasarlanmış normal bir ifade düşünün. Aşağıdaki örnekte, "[(.*?)]" normal ifadesi bir karakter sınıfı olarak yorumlanır. Normal ifade, giriş metnine eklenmiş açıklamaları eşleştirmek yerine her açma veya kapatma parantezi, nokta, yıldız işareti veya soru işaretiyle eşleşir.

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

Ancak, açma köşeli ayracı yönteme Escape geçirilerek atlanırsa, normal ifade giriş dizesine eklenmiş olan eşleşen açıklamalarda başarılı olur. Aşağıdaki örnek bunu göstermektedir.

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

Statik metin kullanılarak tanımlanan normal bir ifadede, meta karakterler yerine tam anlamıyla yorumlanacak karakterler, önüne bir ters eğik çizgi simgesi (\) eklenerek ve yöntemi çağrılarak Escape kaçılabilir. Tasarım zamanında bilinmeyen karakterler kullanılarak dinamik olarak tanımlanan normal bir ifadede, normal ifade altyapısının Escape tek tek karakterleri meta karakterler yerine değişmez değer olarak yorumlamasını sağlamak için yöntemini çağırmak özellikle önemlidir.

Not

Normal ifade deseni sayı işareti (#) veya değişmez boşluk karakterleri içeriyorsa, giriş metni seçenek etkin olarak ayrıştırılırsa RegexOptions.IgnorePatternWhitespace kaçış karakterlerinin atlanması gerekir.

Yöntemi düz Escape açma ayracı ([) ve açma ayracı ({) karakterlerini atlatsa da, karşılık gelen kapanış karakterlerinden (] ve }) kaçmaz. Çoğu durumda, bunlardan kaçmak gerekli değildir. Bir kapanış köşeli ayracı veya ayraç, ilgili açılış karakterinden önce değilse, normal ifade altyapısı bunu tam anlamıyla yorumlar. Bir açma ayracı veya ayraç meta karakter olarak yorumlanırsa, normal ifade altyapısı ilk karşılık gelen kapanış karakterini meta karakter olarak yorumlar. İstenen davranış bu değilse, köşeli ayraç veya ayraç, ters eğik çizgi (\) karakterini açıkça önleyerek atlanmalıdır. Çizim için Örnek bölümüne bakın.

Şunlara uygulanır

Ayrıca bkz.