2012-12-02 15 views
6

Ho difficoltà a dire a Regex di ignorare qualsiasi sequenza di escape.Ignora sequenze di escape Regex C#

Ecco qualche esempio di codice:

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

Ma quando viene eseguito, si getta il seguente errore: "?" parsing - Quantificatore {x, y} in seguito a nulla.

Voglio solo il "?" essere gestito come una stringa.

Grazie.

EDIT: Ho anche provato:

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

Il che mi dice che è non è riconosciuto come una sequenza di escape valida.

Ho anche provato:

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

risposta

11

.NET fornisce una funzione che fa qualsiasi fuga per voi automaticamente. Ogni volta che avete una sorta di stringa di input, che si desidera abbinare letteralmente (solo i caratteri che ci sono), ma si sa si utilizza una ricerca regex, quindi eseguire attraverso questo metodo:

string pattern = Regex.Escape(literalString); 

Questo si prenderà cura di tutti i personaggi che potrebbero essere meta-caratteri per le espressioni regolari.

MSDN on Escape

+0

Grazie, risolto il mio problema! (: –

2

avete bisogno di sfuggire alla ? per il motore regex, come ? ha un significato specifico come quantificatore nelle espressioni regolari:

\? 

Ti consigliamo inoltre di utilizzare verbatim string literals in modo che \ non abbia un significato speciale come sequenza di escape stringa C# - questi due sono equivalenti - @"\?" e "\\?".

Quindi:

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

In generale, il backslash \ è la sequenza di escape entro espressioni regolari.

+0

Ho provato questo, ma non è riconosciuto come una sequenza di escape. Ho anche provato a sostituire "?" con "\ x3f" senza alcun risultato. E che dire di altre stringhe come: "+"? –

+0

@ user1869353 - Sì, è necessario ricordare che si sta lavorando con _two_ languages ​​- c'è l'escape della stringa C# e l'escape regolare. – Oded

+0

Usa due barre e non una –

0

utilizzare il costruito nel metodo di fuga.

Regex.Escape("/") 

Vedi anche MSDN RegEx.Escape()

Problemi correlati