文字列に正規表現との一致があるかどうかを検出するためのコードを以下に示します。どちらもこのメソッドのパラメーターとして送信されます。
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
しましたが、それはプライベート変数なので、続行する方法がわかりません。