从文章内容中计算内联c#代码

本文关键字:计算 代码 文章 | 更新日期: 2023-09-27 18:07:30

我一直在这个圈子里,需要一些帮助。我有一个评估代码的方法,所以如果我通过这个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]实例并返回全文与评估结果。有人知道吗?

从文章内容中计算内联c#代码

你想要一个正则表达式,你可以有一个正则表达式…

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]