1

我希望我的条件之一是断言的字符串不在字符串列表中。

我正在使用决策表,在我的条件单元格中我有

firstName matches("?!($param)")

在我的参数单元格中

Billy|Joe|Bob

出于某种原因,当我有一个像 Sally 这样的名字时,它不符合该规则。如果我从它匹配的参数单元格中删除“Billy|Joe|Bob”。

我可能应该提到我正在使用 drools 3.0.6 我看到提到了在 drools 4 中添加的不匹配但由于我不会进入的原因我无法升级。

4

3 回答 3

0

The best solution I've found is to split this into multiple conditions. I wish I could place these all in one condition but to do that I'm pretty sure I'd need to go up to at least drools 4.

| firstName!="$param" | firstName!="$param" | firstName!="$param" |
|Billy                |Joe                  |Bob                  |

Note: The use of pipes in the original question was to be treated as an "or" whereas here I'm using pipes to denote cells in the table.

于 2012-08-27T20:40:07.763 回答
0

你的前括号不合适。

否定前瞻的语法是:

(?!$param)

但是,仅此更改是不够的。您需要锚定正则表达式:

^(?!.*$param)

这个正则表达式说“匹配任何包含$param”的输入。

因此,使用您的示例,^(?!.*Billy|Joe|Bob)将匹配任何不包含的输入BillJoeBob

于 2012-08-25T01:04:47.310 回答
0

否定前瞻与否定表达式完全不同,我认为这就是您要寻找的。

我不太记得 Drools 3,但您可能必须使用 eval 表达式来否定它。所以你的决策表单元格看起来像

eval( ! getFirstName().matches("($param)") )

基本上,您调用的是纯 java 表达式,而不是使用提供的匹配运算符。

于 2012-08-25T00:41:27.090 回答