如何在C#中编译正则表达式

3

我有以下代码,用于检测一个字符串是否与一个正则表达式匹配,两者作为该方法的参数。

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

我使用了exp.IsMatch而不是Regex.IsMatch,但这是一个私有变量,所以我不知道该如何继续操作。


IsMatch仍然可在实例中使用。使用exp.IsMatch(input)返回布尔值。 - ZafarYousafi
还有一件事。IsMatch是一个方法而不是一个变量。 - ZafarYousafi
请注意,如果您创建一个新的“Dictionary”并在每次调用“BuildRegex”时覆盖“regexCache”,则不会缓存任何内容。 - sloth
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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接