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
,则不会缓存任何内容。