2012-12-02 14 views
6

Ich habe Probleme Regex zu sagen, um alle Escape-Sequenzen zu ignorieren. HierIgnorieren Regex Escape-Sequenzen C#

ist einige Beispiel-Code:

string input = "?"; 
foreach (Match m in Regex.Matches(input, "?")) 
     { 
     ... 
     } 

Aber wenn es ausgeführt wird, führt es folgende Fehlermeldung: "?" Parsing - Quantifizierer {x, y} folgt nichts.

Ich möchte nur das "?" als String behandelt werden.

Danke.

EDIT: Ich habe auch versucht:

foreach (Match m in Regex.Matches(input, "\?")) 
       { 
... 
       } 

Was mir das sagt ist als gültige Escape-Sequenz nicht erkannt.

Ich habe auch versucht:

foreach (Match m in Regex.Matches(input, "\x3f")) 
       { 
... 
       } 

Antwort

11

.NET eine Funktion bereitstellt, die automatisch für Sie Laufene tut. Jedes Mal, wenn Sie irgendeine Art von Eingabezeichenfolge haben, dass Sie buchstäblich (nur die Zeichen, die es gibt) passen wollen, aber Sie wissen, dass Sie eine Regex Suche verwenden, dann sie durch diese Methode auszuführen:

string pattern = Regex.Escape(literalString); 

Diese kümmert sich um alle Zeichen, die Meta-Zeichen für reguläre Ausdrücke sein könnten.

MSDN on Escape

+0

Vielen Dank, löste mein Problem! (: –

2

Sie müssen die ? für die regex Motor entkommen, als ? eine besondere Bedeutung als quantifier in regulären Ausdrücken hat:

\? 

Sie möchten auch verbatim string literals verwenden, damit \ keine besondere Bedeutung als C# -String Escape-Sequenz hat - diese beiden sind äquivalent - @"\?" und "\\?".

So:

string input = "?"; 
foreach (Match m in Regex.Matches(input, @"\?")) 
{ 
    ... 
} 

Im Allgemeinen ist die Backslash \ ist die Escape-Sequenz innerhalb regulären Ausdrücken.

+0

Ich habe versucht, aber es wird nicht als eine Escape-Sequenz erkannt. Ich habe auch versucht, das "?" mit "\ x3f" ohne Erfolg. Und was ist mit anderen Saiten wie: "+"? –

+0

@ user1869353 - Ja, Sie müssen daran denken, dass Sie mit _zwei Sprachen arbeiten - es gibt die C# -String Escape und die Regex-Escape. – Oded

+0

Verwenden Sie zwei Schrägstriche und nicht eine –

0

Verwenden Sie das in Escape-Verfahren gebaut.

Regex.Escape("/") 

Siehe auch MSDN RegEx.Escape()