我是.Net和Drools的初学者。我正在使用Drools 3.0 for .Net Application。我正在尝试解析变量的数据(提起: - 主题/正文和类:-EmailProperties)。
例如: - 如果 Text = “Atal是一个.Net开发人员,正在尝试解析器。” 所以我想要'解析器'或'.Net'作为输出。
我在互联网上搜索过,我发现我们可以通过使用'matches'关键字和正则表达式来实现。我正在使用正则表达式: -
rule "Hello"
when
//m: EmailProperties(Body.indexOf(".Net"))
//m: EmailProperties(Body matches "(?i)(?s)\w.*Developer.*")
// m: EmailProperties(Body matches "/^Developer$/")
// m: EmailProperties(Subject == "Open Position")
m: EmailProperties(Subject matches "/^Position$/")
then
EmailProperties.debugResult("Hello Brother This is testing for Rules Engine");
end
我按照以下链接: - regular expression for exact match of a word
问题: -
1 ..我在这里做错了什么?
2 ..有没有其他方法可以使用Drools与.Net进行解析?
3 ..我正在使用Drools 3进行.Net应用程序。每当我在.Net / Drools中编写正则表达式时,我是否需要注意这个问题?无论是java,.Net还是其他任何应用程序,它都适用于所有地方?正则表达式与技术不同。
谢谢!
答案 0 :(得分:1)
使用Drools运算符匹配,您不必使用锚点^和$,因为匹配(如在Java中)模式匹配模式的整个目标字符串。
如果要与目标字符串的子字符串进行模式匹配,则必须使用.*
括起模式。 (这意味着任意字符序列匹配。)
您可以使用indexOf执行此操作,但是您应该知道,即使字符串包含要包含您想要查找的子字符串,这也会匹配。例如,如果目标字符串包含例如“.Netstocking”,则indexOf(“。Net”)将返回非负结果。
使用Drools进行解析可以通过多种方式实现。在一系列单词(或代币)中捕捉字符串可能会产生令人惊讶的结果。一种非常强大的方法是将文本切割成单词并将一个单词一个接一个地处理。然后规则可以根据序列号匹配单词,例如,“绿色村庄”与“乡村绿色”不同。
关于你的最后一个问题:正则表达式与技术有很大不同。 Java(以及Drools)使用一组相对渐进的通配符和结构。 Perl正处于最前沿。 UNIX实用程序(grep,awk)有点回归。 XQuery 1.0 / XPath 2.0没有Java的所有功能。 (事情发生了变化。也许我忽视了最近的发展。)