2016-05-27 7 views
0

Ich bekomme ein Problem in unten Regel. Dies funktioniert gut in 5.3 aber werfen Fehler (muss Boolescher Ausdruck sein). ?.Drools Regel Problem nach der Migration auf 6.x von 5.3

 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"; 

Ausgabe ist mit der Linie: . "Wenn $ a: Antragsteller (Alter> 18 & & Namen übereinstimmt \" (i) \ "+ name + \" (| \ n | \ r) \ ")"

Irgendwelche beraten.

+0

Bitte erläutern Sie, was der zweite Ausdruck der Beschränkung tun soll? Beachten Sie, dass es einen Unterschied im regulären Ausdruck zwischen dem Code-Snippet und dem Text gibt, nachdem "Problem ist ..." – laune

Antwort

1

Der Ausdruck ist nicht korrekt, da name nicht als Teil einer Experience aufgelöst werden kann. Verwenden Sie eine Bindung.

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

(Ich glaube nicht, das die Einschränkung viel Sinn macht - es ist nur ein Test, ob ein Name selbst übereinstimmt, mit oder ohne beliebige Zeichen vor und nach darüber hinaus die ?i überflüssig..)

+0

Hey Laune, True. Dies ist Legacy-Code und weiß leider nicht den Zweck. In solchen Situationen, in denen die zugrunde liegende Absicht unklar ist, wird es schwierig, sie zu lösen. Für jetzt platziert "(" nach "Übereinstimmungen" und ")" am Ende ausgearbeitet. Danke für die Hilfe –

Verwandte Themen