正常表达与drools

时间:2011-10-25 10:52:02

标签: regex drools

我有一个多行的字符串,如下所示。

rawMessage=sysUpTimeInstance-->0:0:00:05.00
snmpTrapOID.0-->linkDown.0.0

在drools中,部分我写了以下条件。

rawMessage  matches "(?i).*linkDown(.|\n|\r)*"

但它不起作用。请给我一些处理多行的指示。

2 个答案:

答案 0 :(得分:2)

我不清楚你想要做什么/实现什么。你的正则表达式看起来没错(我不知道drools的味道和你想要匹配的东西) 通常,(.|\n|\r)*能够匹配任何字符,包括换行符。在你的例子中,“linkDown”之后没有换行符,那么它应该匹配什么?

也许你需要双重逃避(我不知道drools)这样:(.|\\n|\\r)*

另一种可能性是使用单线修饰符s(同样,我不知道drools是否支持此修饰符)。这使得.匹配也是换行符,可能看起来像这样

rawMessage  matches "(?i)(?s).*linkDown.*"

或者它应该只匹配

上“linkdown”的多行
rawMessage  matches "(?i).*linkDown(?s).*"

答案 1 :(得分:0)

Drools使用标准的java正则表达式。如前面的答案所述,你的表达看起来错了。是的,你需要像在java中那样双重逃避特殊字符。只需检查java API中Pattern类的javadoc。