【发布时间】:2015-06-11 03:35:48
【问题描述】:
我正在开发一个可以接受关系和逻辑运算符的规则系统。
规则系统中的简单表达式可以像
EmployeeAgeProperty >= IntegerProperty:27
我定义什么可以替代EmployeeHireDateProperty,我的规则系统将评估它。假设每个像上面这样的简单表达式都会评估为真/假。我的正则表达式是
(?P<lhs>[A-Z][a-zA-Z]*Property):{0,1}(?P<lhsPrimitiveValue>[A-Za-z0-9]*)\ *(?P<operator>[><=]|!=|<=|>=|in|not_in)\ *(?P<rhs>[A-Z][a-zA-Z]*Property):{0,1}(?P<rhsPrimitiveValue>[A-Za-z0-9]*)
lhs = 左侧
rhs = 右手边。
现在,我想通过逻辑运算符 And/Or(假设 Not 脱离上下文)将多个简单表达式组合成复合表达式。
所以,一个有效的复合表达式应该是
SimpleExpression1 and SimpleExpression2 or SimpleExpression3
其中每个简单的表达式都会匹配上面的正则表达式。
我希望我的正则表达式组返回 ('SimpleExpression1', 'and', SimpleExpression2', 'or', 'SimpleExpression3')
我可以想出这样的东西
([\w\d!=< ]*)\ *(and|or)\ *([\w\d!=< ]*) 将匹配单个复合表达式与一个和/或。但无法进一步扩展。
【问题讨论】: