2

文字列に正規表現との一致があるかどうかを検出するためのコードを以下に示します。どちらもこのメソッドのパラメーターとして送信されます。

private bool Set(string stream, string inputdata) 
{

    bool retval = Regex.IsMatch(inputdata, stream, RegexOptions.IgnoreCase);
    return retval;
}

式をキャッシュしてコンパイルすると正規表現の比較が高速になることを読みました。以下にそのようなコードのサンプルを示しますがSet()、上記の元の方法でコードを変更して、コンパイル。

Set()以下に示すコードを適用するには、どのようにメソッドを変更しますか?

static Dictionary<string, Regex> regexCache = new Dictionary<string, Regex>();

private Regex BuildRegex(string pattern)
{
    Regex exp;
    if (!regexCache.TryGetValue(pattern, out exp))
    {
        var newDict = new Dictionary<string, Regex>(regexCache);
        exp = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
        newDict.Add(pattern, exp);
        regexCache = newDict;
     }

     return exp;
 }

の代わりにRegex.IsMatchを使用exp.IsMatchしましたが、それはプライベート変数なので、続行する方法がわかりません。

4

1 に答える 1

3
private bool Set(string stream, string inputdata) 
{
    var regex = BuildRegex(stream);
    bool retval = regex.IsMatch(inputdata);
    return retval;
}

static Dictionary<string, Regex> regexCache = new Dictionary<string, Regex>();

private static Regex BuildRegex(string pattern)
{
    Regex exp;

    if (!regexCache.TryGetValue(pattern, out exp))
    {
        exp = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
        regexCache.Add(pattern, exp);
    }

    return exp;
}
于 2012-07-23T08:27:53.487 に答える