2013-12-10 9 views
12

Esiste un modo per sfuggire ai caratteri speciali nell'espressione regolare, ad esempio []()* e altri, da una stringa?Escape Special Character in Regex

Fondamentalmente, sto chiedendo all'utente di inserire una stringa, e voglio essere in grado di cercare nel database usando espressioni regolari. Alcuni dei problemi che ho riscontrato sono too many)'s o [x-y] range in reverse order, ecc.

Quindi, quello che voglio fare è scrivere una funzione da sostituire sull'input dell'utente. Ad esempio, la sostituzione ( con \(, sostituendo [ con \[

C'è una funzione built-in per la regex di farlo? E se devo scrivere una funzione da zero, c'è un modo per rendere conto di tutti i personaggi facilmente invece di scrivere l'istruzione di sostituzione uno per uno?

Sto scrivendo il mio programma in C# utilizzando Visual Studio 2010

+0

una ricerca su Google * C# sfuggire speciale espressione regolare carattere * restituisce la risposta. –

+0

Si può sostenere che l'utente deve inserire RE corretto in primo luogo. Non puoi sfuggire al personaggio casuale se non sai se è un personaggio speciale o no. (A meno che tu non voglia che l'utente inserisca RE, ovviamente, ma la questin è perché useresti RE per la query). – eckes

risposta

21

È possibile utilizzare NET built in Regex.Escape per questo. Copiata da l'esempio di Microsoft:

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

è possibile utilizzare Regex.Escape per l'input dell'utente

0
string matches = "[]()*"; 
StringBuilder sMatches = new StringBuilder(); 
StringBuilder regexPattern = new StringBuilder(); 
for(int i=0; i<matches.Length; i++) 
    sMatches.Append(Regex.Escape(matches[i].ToString())); 
regexPattern.AppendFormat("[{0}]+", sMatches.ToString()); 

Regex regex = new Regex(regexPattern.ToString()); 
foreach(var m in regex.Matches("ADBSDFS[]()*asdfad")) 
    Console.WriteLine("Found: " + m.Value); 
+1

Potresti dare qualche spiegazione al tuo codice? – adao7000

+0

Questo è un lavoro non necessario per creare un risultato errato. –

Problemi correlati