Asp.net 我需要帮助做一个正则表达式。替换为多个结果
我正在构建一个自定义页面缓存实用程序,它使用类似于Asp.net 我需要帮助做一个正则表达式。替换为多个结果,asp.net,regex,donut-caching,Asp.net,Regex,Donut Caching,我正在构建一个自定义页面缓存实用程序,它使用类似于{Substitution:GetNonCachedData}的语法来获取不应该缓存的数据。该解决方案与内置的功能非常相似,但没有那么灵活(我不需要),最重要的是,它允许在检索非缓存数据时会话状态可用 无论如何,我有一个方法,用{Substitution}标记中命名的静态方法的结果替换html中的标记 例如,我的页面: <html> <body> <p>This is cached</
{Substitution:GetNonCachedData}
的语法来获取不应该缓存的数据。该解决方案与内置的
功能非常相似,但没有那么灵活(我不需要),最重要的是,它允许在检索非缓存数据时会话状态可用
无论如何,我有一个方法,用{Substitution}标记中命名的静态方法的结果替换html中的标记
例如,我的页面:
<html>
<body>
<p>This is cached</p>
<p>This is not: {Substitution:GetCurrentTime}</p>
</body>
</html>
变量template
是html,其中包含需要替换的自定义标记。此方法的问题是,每次我使用更新的html更新模板
变量时,匹配。索引
变量不再指向正确的字符开头,因为模板
现在添加了更多字符
我可以想出一个解决方案,通过计算字符等或其他一些古怪的方法来实现,但我首先要确保没有更简单的方法可以通过Regex对象实现这一点。有人知道怎么做吗
谢谢 您应该调用
Regex.Replace的重载,该重载接受MatchEvaluator
委托
例如:
return SubstitutionRegex.Replace(template, delegate(Match match) {
var group = match.Groups["method"];
var method = group.Value;
return (string) typeof (Substitution).GetMethod(method).Invoke(null, null);
});
不要对结果使用匹配和循环,而是将regex设置为compiled并在while循环中使用单个匹配,直到它停止匹配为止
return SubstitutionRegex.Replace(template, delegate(Match match) {
var group = match.Groups["method"];
var method = group.Value;
return (string) typeof (Substitution).GetMethod(method).Invoke(null, null);
});