我有一个多行的字符串,如下所示。
rawMessage=sysUpTimeInstance-->0:0:00:05.00
snmpTrapOID.0-->linkDown.0.0
在drools中,部分我写了以下条件。
rawMessage matches "(?i).*linkDown(.|\n|\r)*"
但它不起作用。请给我一些处理多行的指示。
答案 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。