0

SQL で like 演算子が機能するのと同じように、contains 関数を使用できるようにしたいと考えています。したがって、リストまたは「これは私の文字列です」などから .contains(%This%%%%%%is%%my%string%%) を呼び出すと、関数は true を返します。いろいろ調べてみましたが、この機能が欲しいという人は多いようです。では、これをどのように行うか、または同じ機能を持つカスタムのような関数を作成するにはどうすればよいでしょうか?

編集 迅速な対応ありがとうございます。独自のカスタム Like 関数内で正規表現を使用できました。以下は、SQL Like に似たものを使用したい他の人のためのコードです。このコードでは、ユーザーがデータベースの値を入力すると、その値のスペースが .* に置き換えられ、値の間にあるものはすべて無視されます。% を使用して SQL のスペースと値を置き換えるのと同じです。次に、検索している testValue という文字列値に対して .Like を使用して、文字列に含まれる単語などに応じて true または false を返すことができます。大文字と小文字を区別しないように ToUpper も追加しました。//C# ライク関数

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

}

このテストの結果は true になります。

4

1 に答える 1

3

これを行う方法はRegexを使用することです。構文は SQL LIKE クエリと同じではないため、学習曲線が多少必要になります。これは私がよく参照する優れたチュートリアル サイトで、基本から始めることができます。

あなたが尋ねた元の文字列を翻訳すると、正規表現検索パターンは次のようになります

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

慣れたら、パスワード複雑度チェッカーの作成を手伝ったこのような検索を行うことができます

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

上記の検索では、少なくとも 1 つの小文字、1 つの大文字、1 つの特殊文字を含み、空白文字を含まない、8 文字以上の文字列を検索します。

于 2013-05-25T05:13:14.727 に答える