Existe-t-il un moyen d'échapper aux caractères spéciaux dans une expression rationnelle, tels que []()*
et autres, d'une chaîne?
Fondamentalement, je demande à l'utilisateur de saisir une chaîne et je veux pouvoir effectuer une recherche dans la base de données à l'aide de regex. Certains des problèmes que j'ai rencontrés sont too many)'s
ou [x-y] range in reverse order
, etc.
Donc, ce que je veux faire est d’écrire une fonction à remplacer par la saisie de l’utilisateur. Par exemple, remplacer (
par \(
, remplacer [
par \[
Existe-t-il une fonction intégrée permettant à regex de le faire? Et si je dois écrire une fonction à partir de rien, existe-t-il un moyen de comptabiliser facilement tous les caractères au lieu d'écrire l'instruction de remplacement un par un?
J'écris mon programme en C # avec Visual Studio 2010
Vous pouvez utiliser .NET intégré dans Regex.Escape pour cela. Copié à partir de l'exemple de 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?]
vous pouvez utiliser Regex.Escape pour l'entrée de l'utilisateur
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);