Drools匹配模式与变量

时间:2017-09-07 15:19:13

标签: drools

我尝试编写一个规则,将ISO国家/地区代码与字符串中的ISO代码列表进行比较(以逗号分隔)。

规则的时间部分如下所示:

rule "TEST"
when
    $s :SCC();
    $f : Fund()
    (exists(
        RegulationGroup(
        (CI matches ".*" + $s.clientDomicile + ".*")
        ) from $f.regulationGroups
    ))

CI是一个国家/地区列表(例如“DE,AT,GB”),我尝试将其与单个ISO代码进行匹配,该代码由$ s.clientDomicile表示。

以上语法不起作用。错误信息: text = Predicate'CI~ =“。”+ $ s.clientDomicile +“。”'必须是布尔表达式

如何在“匹配”-Pattern中包含变量/数据点?

1 个答案:

答案 0 :(得分:0)

运算符优先级似乎要求您对连接加以括号。这适用于6.4.0:

rule "TEST"
when
  $s: SCC( $cd: clientDomicile )
  $f: Fund( $rg: regulationGroups )
  exists RegulationGroup( CI matches (".*\\b" + $cd + "\\b.*") ) from $rg
then ...  end

我更喜欢绑定在它们所属的模式中脱颖而出。

\b可能对ISO代码有些过分,但它们不会受到伤害。