从帖子内容评估内联C#代码

时间:2015-08-11 14:34:10

标签: c# asp.net regex

我和这个人在一起并需要一些帮助。我有一个方法来评估代码,所以如果我传递这个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]实例并返回带有评估结果的全文。任何人吗?

1 个答案:

答案 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]