【问题标题】:regular expression to evaluate or validate expression entered by user in C#用于评估或验证用户在 C# 中输入的表达式的正则表达式
【发布时间】:2014-12-23 15:42:37
【问题描述】:

我想拆分用户使用正则表达式输入的条件/关系/逻辑表达式,以便在运行时我可以评估用户输入的表达式。以下是用户输入的几个示例表达式。

Expression1 : (a==b && (c >= 10 || d!=0)) || ( a > b)

Expression2 : (c==d && a==b)

现在我想在字符串数组中拆分整个表达式,例如表达式 2,它会像

string str1 = c==d;
string str2 = a==b;

用户输入的表达式可以有多个条件,因此不知道如何进行。

谢谢

【问题讨论】:

  • 你为什么不直接用 '&&' 分割你的字符串呢?另一个问题是:您希望从表达式 1 中得到什么?括号应该怎么处理?
  • @C4ud3x - 是的,应该如何处理刹车,而且它并不总是修复它只会 && .. 下次用户可以使用 || 输入或任何其他
  • 哈。伙计,你不应该问我。我问你你想要它怎么样。我们也许可以告诉你如何编写一些东西,但你应该已经知道你希望它如何表现。很大程度上取决于您的目标。
  • 黑暗(而有趣)的解析艺术。这里的主要问题是:获取 && 和 || 的所有“布尔操作数”运算符并将它们存储在数组中将消除运算符的优先级,以及括号提供的优先级。您应该考虑的是编写简单的解析器来正确评估表达式。结果应该是逻辑一致的中间表示,您可以将其用于评估。对于简单的情况,请参阅此答案:stackoverflow.com/a/2118309/3754223 更复杂的结构可能会变得不令人满意。
  • 第一个表达式的结果是什么?

标签: c# regex logical-operators


【解决方案1】:

正则表达式不是这项工作的正确工具。

如果您希望能够评估任意表达式,您需要实现或使用至少一种简单形式的解析器。

过去我使用NCalc 进行简单的表达式评估任务。它非常好用,开箱即用,支持你使用的所有operators,你甚至可以使用variables。

还有其他可用的库,这只是一个示例。您也可以自己实现解析器,但它可能比您想象的要复杂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2013-11-13
    • 2013-12-12
    • 1970-01-01
    • 2018-11-03
    • 2018-02-16
    • 2012-03-15
    相关资源
    最近更新 更多