我一直在阅读文档,但似乎无法找到以下答案.我需要一个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)
规则引擎在安全性,优化或性能方面如何评估两者之间有什么区别吗?
而且我知道上面的例子并不是检查地址公寓的好方法,只是一个简单的例子,使用大多数人都熟悉的概念.
差异String.matches( Regex regex )与String.contains( CharSequence charSeq )Java中使用的差异大致相同.当针对CharSequence进行评估时,需要编译和解释正则表达式; 在匹配给定字符串的字符串中查找子字符串需要更少的工作量.
编写低效的正则表达式非常容易.".*apt.*"将通过匹配所有目标字符串的字符来执行.*,然后RE引擎将备份,再次尝试,依此类推,直到最后一次匹配为止apt.更好的是".*?apt.*",在apt检测到最左边后将继续匹配.
安全?从何而来?
| 归档时间: |
|
| 查看次数: |
6347 次 |
| 最近记录: |