Escape Special Character в Regex

Есть ли способ избежать специальных символов в регулярном выражении, таких как []()* и другие, из строки?

В принципе, я прошу пользователя ввести строку, и я хочу, чтобы иметь возможность искать в базе данных с помощью регулярного выражения. Некоторые из проблем, с которыми я столкнулся, - это too many)'s или [x-y] range in reverse order и т.д.

Итак, что я хочу сделать, это написать функцию для замены на входе пользователя. Например, заменив ( на \(, заменив [ на \[

Есть ли встроенная функция для регулярного выражения? И если мне нужно написать функцию с нуля, есть ли способ легко записать все символы вместо того, чтобы писать оператор replace один за другим?

Я пишу свою программу на С# с помощью Visual Studio 2010

Ответ 1

Для этого вы можете использовать .NET, встроенный в Regex.Escape. Скопировано из примера 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?]

Ответ 2

вы можете использовать Regex.Escape для ввода пользователем

Ответ 3

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);