drools规则引擎之DRL特殊操作符
“< ⇐ > >=”操作符用于属性的比较时按照默认的排序,比如日期属性使用小于号比较,将按照日期前后排序;当使用在String字符串的比较时,则按照字母顺序进行排序。此操作符仅适用于可进行比较的属性值。
Person( firstName < $otherFirstName ) Person( birthDate < $otherBirthDate ) |
“!.”提供了一个默认空校验的操作。使用此操作符时,会先校验当前对象是否为null,如果不为null再调用其方法或属性进行判断。一旦当前操作对象为null,则相当于判断结果为false。
Person( $streetName : address!.street ) // 上面的写法相当于 Person( address != null, $streetName : address.street ) |
matches操作符可使用Java的正则表达式进行字符串的匹配,通常情况下使用正则表达式字符串进行匹配,但也支持变量值为正确的表达式的方式。此操作符仅适用于字符串属性。如果属性值为null,匹配的结果始终为false。
Cheese( type matches “(Buffalo)?\\S*Mozzarella” ) |
not matches方法与matches相同,唯一不同的是返回的结果与之相反。
Cheese( type not matches “(Buffalo)?\\S*Mozzarella” ) |
contains操作符判断一个集合属性或元素是否包含指定字符串或变量值。仅适用于集合属性。也可以用于替代String.contains()来检查约束条件。not contains用法与之相同,结果取反。
CheeseCounter( cheeses contains “stilton” ) // 包含字符串 CheeseCounter( cheeses contains $var ) // 包含变量 Cheese( name contains “tilto” ) Person( fullName contains “Jr” ) String( this contains “foo” ) |
memberOf用来检查属性值是否属于集合,此集合的表示必须为变量。not memberOf使用方法相同,结果取反。
CheeseCounter( cheese memberOf $matureCheeses ) |
soundslike的效果与matches相似,但它用来检查一个字符串的发音是否与指定的字符十分相似(使用英语发音)。
// 匹配 “fubar” 或 “foobar” Cheese( name soundslike ‘foobar’ ) |
str操作用来比较一个字符串是否以指定字符串开头或结尾,有可以用于比较字符串的长度。
Message( routingValue str[startsWith] “R1” ) Message( routingValue str[endsWith] “R2” ) Message( routingValue str[length] 17 ) |
in和notin用来匹配一组数据中是否含一个或多个匹配的字符串,使用的方法与数据库中in的使用方法相似。待匹配的数据可以是字符串、变量。
Person( $cheese : favouriteCheese ) Cheese( type in ( “stilton”, “cheddar”, $cheese ) ) |
运算符优先级
操作类型 | 操作符 | 备注 |
(嵌套/空安全)属性访问 | .!. | 非标准java语义 |
List/Map访问 | [ ] | 非标准java语义 |
约束绑定 | : | 非标准java语义 |
乘除 | \*/% | |
加减 | \+- | |
移位 | <<>>>>> | |
关系 | <>⇐>=instanceof | |
等 | ==!= | 未使用标准java语义,某些语义相当于equals。 |
非短路AND | & | |
非短路异或 | ^ | |
非短路包含OR | | | |
逻辑与 | && | |
逻辑或 | || | |
三元运算符 | ? : | |
逗号分隔,相当于and | , | 非标准java语义 |
相关技术视频
QQ技术交流2群:715840230
CSDN学院:《Drools7规则引擎进阶教程》
CSDN学院:《Drools7规则引擎入门教程》
CSDN学院:《Drools7系列优惠套餐》
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接