Drools LHS评估:匹配vs String.contains()

jos*_*ain 3 drools

我一直在阅读文档,但似乎无法找到以下答案.我需要一个Drools规则来检查并查看字符串是否包含另一个字符串.我想知道评估中的差异(如果有的话)是这样写的:

rule "String Matches"
   when
      Address(street matches ".*apt.*")
   then
      log.info("Someone likely lives in an apartment");
end
Run Code Online (Sandbox Code Playgroud)

与编写相同的逻辑:

rule "String Contains"
   when
      Address(street.contains("apt"))
   then
      log.info("Someone likely lives in an apartment");
end
Run Code Online (Sandbox Code Playgroud)

规则引擎在安全性,优化或性能方面如何评估两者之间有什么区别吗?

而且我知道上面的例子并不是检查地址公寓的好方法,只是一个简单的例子,使用大多数人都熟悉的概念.

lau*_*une 5

差异String.matches( Regex regex )String.contains( CharSequence charSeq )Java中使用的差异大致相同.当针对CharSequence进行评估时,需要编译和解释正则表达式; 在匹配给定字符串的字符串中查找子字符串需要更少的工作量.

编写低效的正则表达式非常容易.".*apt.*"将通过匹配所有目标字符串的字符来执行.*,然后RE引擎将备份,再次尝试,依此类推,直到最后一次匹配为止apt.更好的是".*?apt.*",在apt检测到最左边后将继续匹配.

安全?从何而来?