我需要匹配一些运算符:=,!=,>,<,< =,> = 我需要匹配的字符串可能类似于:“2 = 2 OR 33> = 32 AND 3 < 5"正则表达式帮助匹配运算符
什么可以是正则表达式匹配表达式这一点,知道 - 我不希望收到一个‘< =’操作 一个‘=’匹配 - 的运营商可能会或可能不会有周围的空间
在此先感谢! 亚历
我需要匹配一些运算符:=,!=,>,<,< =,> = 我需要匹配的字符串可能类似于:“2 = 2 OR 33> = 32 AND 3 < 5"正则表达式帮助匹配运算符
什么可以是正则表达式匹配表达式这一点,知道 - 我不希望收到一个‘< =’操作 一个‘=’匹配 - 的运营商可能会或可能不会有周围的空间
在此先感谢! 亚历
这似乎工作:
[<>!]?=|[<>]
这需要:<
,>
或!
=
(或只是=
)之前,
OR:<
或>
它们对。
这就是说,对于更多的复杂性,你可能需要一个解析器(例如,如果你想支持括号)
你是否也试图获得数字?如果是的话。 。 。
/[0-9]+[ ]*(<=|>=|!=|=|>|<)[ ]*[0-9]+/
...在0-9一次或多次的范围内什么,其次是0或多个空格,然后你的运营商,0或多个空格以及任何在0-9的一个或多个范围倍。
这将让数和操作
在这里,你会得到另一个问题集:该数字可以是负数,有小数位等 – 2010-02-02 12:45:38
真的,在这种情况下,最好重写正则表达式来匹配它。我总是觉得最好是最完整的。如果你正在寻找复杂的,真实的,整数,整数或其他类型的数字,你应该编写正则表达式来匹配,而不是让它模棱两可,以后可能会遇到麻烦。 – Toymakerii 2010-02-02 14:10:31
不,我只是为了识别操作符及其左右操作数和聚合操作符(如果有的话)(AND/OR)。 在我的例子中,我只写了数字,但我的操作数可以是任何有效的C#编译器成功编译,这是从简单的CLR类型到复杂的自定义类型。 所以我不介意用户编写的操作数是什么,只要它编译和评估对我来说很好。 – AlexCode 2010-02-02 14:46:42
[^?!><=]+\s*(?<operator>[><!]?=|[><])\s*[^?!><=]+
+ ExplicitCapture
过滤器>>
或===
或== ==
在搜索运算符之前,我首先通过逻辑运算符(AND/OR)拆分表达式。每个逻辑运算符之间只能有一个规则条件(左操作数,右操作数,右操作数)。 因此,如果在逻辑运算符之间找到多于一个运算符,解析器将自动抛出“无效的Empression”异常。 这样我就不需要对RegEx模式执行任何验证。 – AlexCode 2010-02-02 14:57:44
我在想,我可能需要执行一个验证寿命...我需要跳过引号之间的运算符。如果一个操作数是一个包含操作符的字符串,可能会发生这种情况,例如:“Alex”=“
如果您的操作数包含引号,则需要检查它们是否关闭。 – serhio 2010-02-02 15:37:29
你会最终会解析表达式与他们(嵌套)括号? – 2010-02-02 11:49:27
我正在评估这些表达式,并且它可以是c#编译器可以理解的任何东西。 这将成为规则引擎的一部分,可以接受2种表达类型,c#和伪代码。 伪代码可以让你设计你的规则很像TFS查询生成器,但是如果你需要更快,预编译和更复杂的规则,你需要用c#编写它们。 这个表达式将用于去除伪代码表达式,但是括号和组运算符(AND/OR)的评估顺序将留给c#编译器来处理:) – AlexCode 2010-02-02 12:23:30
如果'Left/Right Operand'包含引号,你需要检查他们是否关闭。 – serhio 2010-02-02 15:48:01