C# 如何在C中编译regularexpression#

C# 如何在C中编译regularexpression#,c#,regex,C#,Regex,我有如下所示的代码,用于检测字符串是否与正则表达式匹配,这两个正则表达式都作为此方法的参数发送 private bool Set(string stream, string inputdata) { bool retval = Regex.IsMatch(inputdata, stream, RegexOptions.IgnoreCase); return retval; } 我已经读到缓存和编译表达式将使正则表达式比较更快,下面我有一个这样的代码示例,但我不知道如何修改上

我有如下所示的代码,用于检测字符串是否与正则表达式匹配,这两个正则表达式都作为此方法的参数发送

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;
 }
static Dictionary regexCache=new Dictionary();
私有正则表达式BuildRegex(字符串模式)
{
正则表达式;
如果(!regexCache.TryGetValue(模式,输出exp))
{
var newDict=新字典(regexCache);
exp=新正则表达式(模式,RegexOptions.Compiled | RegexOptions.IgnoreCase);
添加(模式,exp);
regexCache=newDict;
}
返回经验;
}
我使用的不是
Regex.IsMatch
,而是
exp.IsMatch
,但这是一个私有变量,所以我不知道如何继续。

私有布尔集(字符串流,字符串输入数据)
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;
}
{ var regex=BuildRegex(流); bool retval=regex.IsMatch(输入数据); 返回返回; } 静态字典regexCache=新字典(); 私有静态Regex BuildRegex(字符串模式) { 正则表达式; 如果(!regexCache.TryGetValue(模式,输出exp)) { exp=新正则表达式(模式,RegexOptions.Compiled | RegexOptions.IgnoreCase); 添加(模式,exp); } 返回经验; }
IsMatch在实例中仍然可用。使用exp.IsMatch(输入),它还返回布尔值。IsMatch是一种方法,而不是一个变量注:如果您创建一个新的
字典
并在每次调用
BuildRegex
时覆盖
regexCache
,则不会缓存任何内容。