2011-10-25 15 views
1

私は以下のように複数行の文字列を持っています。正規表現で落ちるもの

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

以下のような条件が書かれています。

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

しかし、動作していません。複数行を扱うためのいくつかのポインタを提供してください。

答えて

2

あなたがしたい/達成したいことは私にはっきりしていません。あなたの正規表現は間違っていないように見えます(私はdroolsの味とあなたが一致したいものは分かりません)。
一般に、(.|\n|\r)*は、改行を含む任意の文字に一致することができます。あなたの例では、 "linkDown"の後に改行がないので、そこには何が一致するはずですか?

多分あなたはこのような脱出(私は垂れ流しのための知らない)をダブルする必要があります:(.|\\n|\\r)*

もう一つの可能​​性は、改行修飾子sを使用することです(やはり、droolsがこの修飾子をサポートしているかどうかわかりません)。これは、この

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

ようなものを見ることができる、また.試合に改行文字を作るか、それだけで

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

私は "(?i)(?s)。* linkDown。*"にマッチするアプローチrawMessageを試しました。それは私のために働いています。たくさんのステーマをお寄せください – mohan

+1

ようこそ。それが問題を解決した場合に答えを受け入れるためのSOの優れた練習は、[ここでは、どうやって受け入れられる解答作業]を参照してください(http://meta.stackexchange.com/questions/5234/how-does-アンサーワーク)。 – stema

0

のDroolsの「リンクダウン」から、複数行を一致させる必要がある場合は、標準のJava正規表現を使用しています。以前の答えに言及したように、あなたの表現は間違っています。そして、はい、Javaで行うような特別な文字を二重にエスケープする必要があります。 javadocでJava APIのPatternクラスを調べてください。

+0

double escpace.still no luckを追加しました。私はdrools5を使用しています。 – mohan