gpt4 book ai didi

Drools LHS 评估 : matches vs String. contains()

转载 作者:行者123 更新时间:2023-12-01 11:32:53 25 4
gpt4 key购买 nike

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

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

与像这样编写相同的逻辑:
rule "String Contains"
when
Address(street.contains("apt"))
then
log.info("Someone likely lives in an apartment");
end

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

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

最佳答案

区别与使用 String.matches( Regex regex ) 大致相同与 String.contains( CharSequence charSeq )在 java 。对 CharSequence 求值时,需要编译和解释正则表达式;在与给定字符串匹配的字符串中查找子字符串需要较少的努力。

而且很容易写出一个低效的正则表达式。 ".*apt.*"将通过将所有目标字符串的字符与 .* 匹配来执行,然后 RE 引擎将备份,重试,依此类推,直到最后一次出现 apt匹配。更好的是".*?apt.*" ,它将在最左边的 apt 之后继续匹配被检测到。

安全?从何而来?

关于Drools LHS 评估 : matches vs String. contains(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30755281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com