0

我希望能够像使用 sql 中的 like 运算符一样使用 contains 函数。因此,当我从列表或诸如“这是我的字符串”之类的任何内容中调用 .contains(%This%%%%%is%%my%string%%) 时,该函数将返回true。我做了很多搜索,似乎很多人都喜欢这个功能。那么如何做到这一点,或者如何制作具有相同功能的自定义功能?

编辑谢谢您的快速回复。我能够在我自己的自定义 Like 函数中使用正则表达式。下面是任何想要使用类似于 SQL Like 的东西的人的代码。在此代码中,用户将输入数据库值,然后将该值中的空格替换为 .* 以忽略值之间的任何内容。就像在 SQL 中使用 % 替换空格和值一样。然后,我可以在我正在搜索的名为 testValue 的字符串值上使用 .Like 来返回 true 或 false,具体取决于字符串中的单词或其他内容。我还添加了 ToUpper 以忽略此情况。//C#like函数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace sqllinqstuff
{


class Program
{
    static void Main(string[] args)
    {
        string testValue = "Big RED           Car";

        string databaze = "big red CAR";

        string databaze3 = databaze.Replace("     ", ".*");
        databaze3 = databaze3.Replace(" ", ".*");

        Console.WriteLine(databaze3);
        Console.WriteLine(testValue.Like(databaze3)); 

Console.Read();

    }
}



public static class CaseyStringExtension
{
    public static bool Like(this string str,string value)
    {
        if (!string.IsNullOrEmpty(str))
        {
            Regex r = new Regex(value.ToUpper());
                if (r.IsMatch(str.ToUpper()))
                    return true;

        }

        return false;
    }
}

}

这个测试的结果将是真实的。

4

1 回答 1

3

这样做的方式是使用Regex。语法与 SQL LIKE 查询不同,因此会有一些学习曲线。这是我经常参考的一个很好的教程网站,它可以让你从基础开始。

翻译您询问的原始字符串,正则表达式搜索模式将是

.*This.*is.*my.*string.*

一旦你掌握了它,你就可以进行像我帮助创建的密码复杂性检查器这样的搜索

(?=^.{8,}$)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W_])(?=^.*[^\s].*$).*$

上述搜索查找包含至少 8 个字符且至少包含一个小写字母、一个大写字母、一个特殊字符且没有空白字符的字符串。

于 2013-05-25T05:13:14.727 回答