2016-05-27 4 views
0

以下のルールで問題が発生しています。これは5.3では問題なく動作していますが、エラーをスローします(ブール式でなければなりません)。5.3から6.xに移行した後のDroolsルールの問題

 String drl="import com.drools.Applicant;" 
      + "rule \"Is of valid age\" " 
      + " when $a : Applicant(age > 18 && name matches \"(?i).*\"+ name + \"(.|\n|\r)*\")" 
      + " then $a.setValid(true); " 
      + " System.out.println(\"validation: \" + $a.isValid());\n"+ 
       "end"; 

問題はラインである: "とき$:申請者(年齢> 18 & &名は\と一致する" "+名+ \" \(I)(| \ nは| \ rの?。。 ) \ ")"

アドバイスをお願いします。

+0

制約の第2項が何をすべきか説明してください。コードスニペットと "Issue is ..."の後のテキストの正規表現には違いがあることに注意してください。 – laune

答えて

1

nameはエクスペリエンスの一部として解決できないため、この式は正しくありません。バインディングを使用します。

$a : Applicant($n: name, age > 18, name matches \"(?i).*\"+ $name + \"(.|\n|\r)*\")" 

(私は制約が非常に理にかなっているとは思わない - 。。それは名前の前と後の任意の文字の有無にかかわらず、自分自身にマッチするかどうか、単にテストです。また、?iは不要です)

+0

Hey Laune、Trueこれは旧式のコードであり、残念なことに目的を知らない。根底にある意図が不明な状況では、解決するのが難しいです。今のところ、 "マッチ"と ")"の後ろに "("を配置して、最後に解決しました。助けてくれてありがとう –

関連する問題