1

私の条件の1つは、アサートされた文字列が文字列のリストにないことです。

デシジョンテーブルを使用していて、条件セルに

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

そしてparamセルに私が持っている

Billy|Joe|Bob

どういうわけか、私がサリーのような名前を持っているとき、それはその規則に一致しません。パラメータセルから「Billy|Joe | Bob」を削除すると、一致します。

私はdrools3.0.6を使用していることを言及する必要があります。drools4で追加された不一致の言及を見ましたが、私が入らない理由でアップグレードできません。

4

3 に答える 3

0

否定的な先読みは、表現を否定することとはまったく異なるものであり、あなたが探しているものだと思います。

Drools 3のことはあまり覚えていませんが、それを否定するにはeval式を使用する必要があります。したがって、デシジョンテーブルのセルは次のようになります。

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

基本的に、提供されている一致演算子を使用する代わりに、純粋なJava式を呼び出しています。

于 2012-08-25T00:41:27.090 に答える
0

先頭のブラケットがずれています。

ネガティブルックアヘッドの構文は次のとおりです。

(?!$param)

ただし、この変更だけでは十分ではありません。正規表現を固定する必要があります。

^(?!.*$param)

この正規表現には、「を含まないすべての入力に一致する」と記載されています$param

したがって、あなたの例を使用すると、、または^(?!.*Billy|Joe|Bob)を含まない入力と一致しますBillJoeBob

于 2012-08-25T01:04:47.310 に答える
0

私が見つけた最善の解決策は、これを複数の条件に分割することです。これらすべてを1つの条件にまとめることができればいいのですが、そのためには、少なくともdrools4まで上げる必要があると確信しています。

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

注:元の質問でのパイプの使用は「または」として扱われることになっていたのに対し、ここではパイプを使用してテーブル内のセルを示しています。

于 2012-08-27T20:40:07.763 に答える