【发布时间】:2015-08-11 14:34:10
【问题描述】:
我一直在这个圈子里转圈,需要一些帮助。我有一个评估代码的方法,所以如果我通过这个 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] 实例并返回带有评估结果的全文。有人吗?
【问题讨论】:
-
你知道你可以简单地
IndexOf("[EVAL]")而不用对抗正则表达式吗? -
@Zaki:我认为他们要求不要仅删除“[EVAL]”标记,还要求替换/评估这些标志中的表达式。编辑:也就是说,他们有评估代码,所以他们只需要 extract 表达式。
-
您可以尝试
string.Split()沿着"[EVAL]"和"[/EVAL]"边界,存储到一个自定义数据结构中,该结构基本上包含两个列表。文字字符串之一,以及可评估字符串之一。然后评估它们并从列表中重新构建结果字符串。 -
附带说明一下,您是否考虑过使用为此目的而设计的技术?例如,如果您将帖子保存为 Razor 页面,则可以使用
@DateTime.Now.Year语法。 -
(\[(EVAL)\]){1}([\w\.\d\s\-]+)\[\/(EVAL){1}\]为您的示例字符串提供了两个匹配项。