我希望我的一个条件是断言的字符串不在字符串列表中。
我使用的是决策表,在我的条件单元格中我有
firstName matches("?!($param)")
在param单元格中我有
Billy|Joe|Bob
由于某种原因,当我有一个像莎莉这样的名字时,它并不匹配该规则。如果我删除" Billy | Joe | Bob"来自它匹配的param单元格。
我应该提到我使用drools 3.0.6我看到提到了drools 4中添加的不匹配但是由于我不能进入的原因我无法升级。
答案 0 :(得分:0)
负面向前看是与否定表达完全不同的东西,我认为是你在寻找的东西。
我不太记得Drools 3,但你可能不得不使用eval表达式来否定它。所以您的决策表单元格看起来像
eval( ! getFirstName().matches("($param)") )
基本上,您调用的是纯Java表达式,而不是使用提供的匹配运算符。
答案 1 :(得分:0)
您的前导支架不合适。
前瞻性的语法是:
(?!$param)
然而,仅凭这一改变是不够的。你需要锚定正则表达式:
^(?!.*$param)
此正则表达式“匹配不包含$param
”的任何输入。
因此,使用您的示例,^(?!.*Billy|Joe|Bob)
会匹配任何不包含Bill
,Joe
或Bob
答案 2 :(得分:0)
我发现的最佳解决方案是将其拆分为多个条件。我希望我可以把这些都放在一个条件下,但为了做到这一点,我很确定我需要至少流口水4。
| firstName!="$param" | firstName!="$param" | firstName!="$param" |
|Billy |Joe |Bob |
注意:在原始问题中使用管道被视为“或”,而在这里我使用管道来表示表格中的单元格。