8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在正则表达式中转义特殊字符

John Gerken 2月前

42 0

有没有办法从字符串中转义正则表达式中的特殊字符,例如 []()* 等?基本上,我要求用户输入一个字符串,并且我希望能够在数据库中搜索

从字符串 []()* 中转义正则表达式中的特殊字符,例如

基本上,我要求用户输入一个字符串,并且我希望能够使用正则表达式在数据库中搜索。我遇到的一些问题是 too many)'s [x-y] range in reverse order 等等。

因此,我想要编写一个函数来对用户输入进行替换。例如,替换 ( \( ,替换 [ \[

正则表达式是否有内置函数可以执行此操作?如果我必须从头开始编写函数,是否有办法轻松地计算所有字符,而不是逐个编写替换语句?

我正在使用 Visual Studio 2010 用 C# 编写程序

帖子版权声明 1、本帖标题:在正则表达式中转义特殊字符
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由John Gerken在本站《regex》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 可以说,用户首先必须输入正确的 RE。如果您不知道它是否是特殊字符,您就不能随意转义随机字符。(当然,除非您不希望用户输入 RE,但问题是为什么要使用 RE 进行查询)。

  • 您可以使用 .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?]
    
  • 您可以使用 Regex.Escape 来获取用户的输入

  • 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);
    
返回
作者最近主题: