私は以下のように複数行の文字列を持っています。正規表現で落ちるもの
rawMessage=sysUpTimeInstance-->0:0:00:05.00
snmpTrapOID.0-->linkDown.0.0
以下のような条件が書かれています。
rawMessage matches "(?i).*linkDown(.|\n|\r)*"
しかし、動作していません。複数行を扱うためのいくつかのポインタを提供してください。
私は以下のように複数行の文字列を持っています。正規表現で落ちるもの
rawMessage=sysUpTimeInstance-->0:0:00:05.00
snmpTrapOID.0-->linkDown.0.0
以下のような条件が書かれています。
rawMessage matches "(?i).*linkDown(.|\n|\r)*"
しかし、動作していません。複数行を扱うためのいくつかのポインタを提供してください。
あなたがしたい/達成したいことは私にはっきりしていません。あなたの正規表現は間違っていないように見えます(私はdroolsの味とあなたが一致したいものは分かりません)。
一般に、(.|\n|\r)*
は、改行を含む任意の文字に一致することができます。あなたの例では、 "linkDown"の後に改行がないので、そこには何が一致するはずですか?
多分あなたはこのような脱出(私は垂れ流しのための知らない)をダブルする必要があります:(.|\\n|\\r)*
。
もう一つの可能性は、改行修飾子s
を使用することです(やはり、droolsがこの修飾子をサポートしているかどうかわかりません)。これは、この
rawMessage matches "(?i)(?s).*linkDown.*"
ようなものを見ることができる、また.
試合に改行文字を作るか、それだけで
rawMessage matches "(?i).*linkDown(?s).*"
のDroolsの「リンクダウン」から、複数行を一致させる必要がある場合は、標準のJava正規表現を使用しています。以前の答えに言及したように、あなたの表現は間違っています。そして、はい、Javaで行うような特別な文字を二重にエスケープする必要があります。 javadocでJava APIのPatternクラスを調べてください。
double escpace.still no luckを追加しました。私はdrools5を使用しています。 – mohan
私は "(?i)(?s)。* linkDown。*"にマッチするアプローチrawMessageを試しました。それは私のために働いています。たくさんのステーマをお寄せください – mohan
ようこそ。それが問題を解決した場合に答えを受け入れるためのSOの優れた練習は、[ここでは、どうやって受け入れられる解答作業]を参照してください(http://meta.stackexchange.com/questions/5234/how-does-アンサーワーク)。 – stema