【问题标题】:Search string against "%"针对“%”搜索字符串
【发布时间】:2011-10-20 10:10:03
【问题描述】:

我正在尝试编写一个支持“%”的 C# 搜索函数,该函数在类似 SQL 的运算符中进行搜索。 例如,

"%m%" 将匹配所有字符串,如下所示。

  • 一些
  • 总和
  • 等等..

"%m%e" 将匹配类似 "some" 的字符串。

【问题讨论】:

    标签: c# .net regex .net-2.0 c#-2.0


    【解决方案1】:
    static bool Like(string expression, string value)
    {
        return Regex.IsMatch(value, "^" + 
            Regex.Escape(expression).Replace("%", @"[\s\S]*?") + "$", 
            RegexOptions.IgnoreCase);
    }
    

    【讨论】:

    • 很好地使用Regex.Escape 来防止无效的正则表达式模式。
    • +1 我在写“它很完美。第一个正则表达式在一个镜头中正确(并且完美地”写入(记录))。但后来我注意到你没有锚定它 :-) 字符串 Hello 将匹配 Hello World :-)
    • @Rubens:你忘记了 LIKE 的转义字符 !。 :) 你需要一个“真正的”解析器。
    • @Ruben,我怎样才能让它不区分大小写??
    • @RubensFarias var result = Like("Hello", "Hello World"); // Should be false, it's true
    【解决方案2】:
    public bool SqlWildcardMatch(string input, string sqlLikePattern)
    {
         sqlLikePattern = Regex.Replace(sqlLikePattern, "^([^%])", "^$1");
         sqlLikePattern = Regex.Replace(sqlLikePattern, "([^%])$", "$1$$");
    
         return Regex.IsMatch(input, string.Replace(sqlLikePattern, "%", ".*"));
    }
    

    此函数可能需要改进以确保 sqlLikePattern 不会产生无效的正则表达式模式,但应将其视为一个起点。

    【讨论】:

    • 谢谢..我想这就是我要找的。让我试试。
    • 谨防带有正则表达式字符的sqlLikePattern;你必须先对它们进行消毒
    • 你必须把_翻译成.。并且需要支持LIKE的转义符!
    【解决方案3】:

    如果您还想拥有 SQL 的 LIKE 处理下划线的方式,您可以使用我对 C# Version Of SQL LIKE 的回答,如果没有,您可以删除位 Replace('_', '.')

    【讨论】:

      【解决方案4】:

      您可以使用正则表达式来实现这一点。

      请看:

      http://www.codeproject.com/KB/recipes/wildcardtoregex.aspx

      【讨论】:

        【解决方案5】:

        如何使用regex.*m.*

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-09
          • 1970-01-01
          • 2016-11-30
          相关资源
          最近更新 更多