私は現在内部ログファイル(log4php、log4net、およびlog4jによって生成されたもの)用のパーサーを開発中です。これまでは、厄介なものを除いて、ログを解析するための良い正規表現があります。いくつかのログメッセージは、複数の行にまたがっていますが、これは正しく一致することができません。私が今持っている正規表現はこれです:正規表現によるログファイルの解析
(?<date>\d{2}/\d{2}/\d{2})\s(?<time>\d{2}):\d{2}:\d{2}),\d{3})\s(?<message>.+)
(私はパーサをテストするために使用)、ログフォーマットはこれです:
07/23/08 14:17:31,321 log
message
spanning
multiple
lines
07/23/08 14:17:31,321 log message on one line
私は今、パーサーを実行すると、私は唯一の行を取得しますログが開始されます。複数の行にまたがるように変更すると、結果は1つだけ(ログファイル全体)になります。
@samjudson: "" あなたは、正規表現の中でRegexOptions.Singlelineフラグを渡すようにする必要があり
新しい行を除くすべての文字(デフォルト)だけでなく、すべての文字に一致します。
私はそれを試みましたが、それはファイル全体と一致します。私もメッセージグループを。+に設定しようとしました。 (貪欲ではない)が、1文字にマッチする(これは私が探しているものではない)。
問題は、メッセージのパターンが日付グループでも一致するため、改行で折れていないときには、単に繰り返し表示されるということです。
メッセージグループにこの正規表現を使用します。ログメッセージの開始と同じログメッセージのパターンがない限り、動作します。
(?<message>(.(?!\d{2}/\d{2}/\d{2}\s\d{2}:\d{2}:\d{2},\d{3}\s\[\d{4}\]))+)