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 回答