Drools drool文件中的正则表达式

Drools drool文件中的正则表达式,drools,Drools,我正在drool中使用regex来验证密码 rule "Reset Password" when $event : IIPEvent ( name == 'save') $vm : Login(userProfile != null) then if($vm.getPassword().getValue() != null && $vm.getPassword().getValue().matches('^(?=.*[

我正在drool中使用regex来验证密码

    rule "Reset Password"
when
    $event : IIPEvent ( name == 'save')
    $vm : Login(userProfile != null)
then
    
    if($vm.getPassword().getValue() != null && $vm.getPassword().getValue().matches('^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$'))
    outcome.addFieldError('password', 'Password minimum eight characters, at least one letter and one number', $vm, false);
            
end
当我在Tomcat服务器中部署它时,我得到以下异常

第11行:104字符“d”处没有可行的替代方案 第11行:113字符“\”处没有可行的替代方案 2020年10月23日晚上8:48:21 org.drools.compiler.kie.builder.impl.AbstractKieModule buildKnowledgePackages 严重:无法生成KieBaseModel:defaultKieBase 无法确定使用的声明。 java.lang.NullPointerException:[规则名称='Reset Password'] java.lang.NullPointerException


如果有人知道如何解决这个问题,请告诉我你应该在左手边进行匹配,而不是在右手边。这就是“匹配”操作符的作用

rule "Reset Password"
when
    exists(IIPEvent(name == "save"))
    $vm : Login( userProfile != null,
                 password != null,
                 password matches "(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$")
then
  outcome.addFieldError("password", "Password minimum eight characters, at least one letter and one number", $vm, false);
end
至于为什么会出现错误,您使用的是
\d
,而不是
\\d
。您需要为字符串中的字符类转义反斜杠。您可以从错误消息中看出这是问题所在:
字符“d”处没有可行的替代方案
,然后
字符“\”处没有可行的替代方案