我和这个人在一起并需要一些帮助。我有一个方法来评估代码,所以如果我传递这个Eval("DateTime.Now.Year - 1986")
它返回29,它工作得很好,这意味着我可以在我的帖子中有内联代码,在运行时动态评估(这可能会带来一些安全问题,但是在其他时间),这是我尝试使用的示例字符串:string inStr = "this year is [EVAL]DateTime.Now.Year[/EVAL] and it has been [EVAL]DateTime.Now.Year - 1986[/EVAL] years since 1986";
我需要一个正则表达式,它将替换所有[EVAL]实例并返回带有评估结果的全文。任何人吗?
答案 0 :(得分:1)
你想要一个正则表达式,你可以有一个正则表达式...
string inStr = "this year is [EVAL]DateTime.Now.Year[/EVAL] and it has been [EVAL]DateTime.Now.Year - 1986[/EVAL] years since 1986";
var rx = new Regex(@"(\[EVAL\])(.*?)(\[/EVAL])");
string outStr = rx.Replace(inStr, RegexReplacer);
与
public static string RegexReplacer(Match match)
{
return Eval(match.Groups[2].Value);
}
或取决于Eval
的返回类型:
public static string RegexReplacer(Match match)
{
object obj = Eval(match.Groups[2].Value);
return obj != null ? obj.ToString() : string.Empty;
}
捕获组#2是(.*?)
。请注意使用延迟量词.*?
,否则捕获将为[EVAL]DateTime.Now.Year[/EVAL] and it has been [EVAL]DateTime.Now.Year - 1986[/EVAL]