我将此规则设置为drools。
global String ipv4regex;
rule "Initialize global"
salience 1000
when
then
drools.getWorkingMemory().setGlobal( "ipv4regex", "\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b");
end
rule "Router"
when
r : Router( Ipaddress matches ipv4regex)
then
System.out.println("Valid ip address");
end
这里我正在检查有效的IP地址,但即使我的路由器IP地址有效,我的规则“路由器”也没有显示“有效的IP地址”。这里可能存在什么问题以及如何在匹配中使用全局变量?
答案 0 :(得分:3)
全局变量的设置发生得太晚了。您必须在插入任何事实之前执行此操作。
这是由于全局变量未被规则引擎监控 - 与事实相反,其中(通过修改或更新公布)更改被重新考虑,从而导致重新评估。
<强>后来强>
您可以在DRL中为此目的声明一个事实类型:
declare Const
pattern: String
end
rule initConst
salience 1000
when
then
insert( new Const( "\\b(25[0-5]|2..." ) );
end
rule "Router"
when
Const( $pat: pattern )
r : Router( Ipaddress matches $pat )
then
System.out.println("Valid ip address");
end