元の質問には新しい方向性が必要なようです:元の質問
次のタイプのログ エントリから STATIC MESSAGE と DYNAMIC MESSAGE を抽出できる正規表現を作成したいと考えています。
/long/file/name/with.dots.and.extension:Jan 01 12:00:00 TYPE 静的メッセージ;動的メッセージ
/long/file/name/with.dots.and.extension:Jan 01 12:00:00 MODULE.NAME TYPE THREAD.OR.CONNECTION.INFORMATION 静的メッセージ;動的メッセージ
1 つのログ エントリ タイプの構造は単純です。
file:date TYPE STATIC;DYNAMIC
もう1つは、正規表現で解析しようとするとそれほど単純ではありません:
file:date MODULE.NAME TYPE CONNECTION.OR.THREAD STATIC;DYNAMIC
ここで、MODULE.NAME
とのCONNECTION.OR.THREAD
両方が存在するか存在しないかのいずれかです。
最初のタイプのログエントリで機能するこれまでの私の正規表現は次のとおりです。
(?:.*?):(?:\w{3} \d{1,2} \d{1,2}:\d{1,2}:\d{1,2})(?:\s+?)(?:[\S|\.]*?(?:\s*?))?(?:(?:TYPE1)|(?:TYPE2)|(?:TYPE3))(?:\s+?)(?:\S+?(?:\s+?))?(.+){1}(?:;(.+)){1}
しかし、2 番目のタイプのエントリに到達するたびに、最初のキャプチャ グループの一部として CONNECTION.OR.THREAD も取得しています。
?がある場合にその部分をキャプチャSTATIC
しDYNAMIC
て無視できるように、先読みまたは後読み機能を使用する方法を望んでいます。CONNECTION.OR.THREAD
MODULE.NAME
この質問が明確であることを願っています。少し暗いと思われる場合は、私のオリジナルを参照してください。ありがとうございました。
編集:明確にするために。ログのすべての行は他の行とは異なります。各行はファイルパスで始まり、次に:
日付が次の形式で始まります:MMM DD HH:MM:SS
そして、それはトリッキーになります。変化するか、または. その後、静的メッセージと動的メッセージの両方が変化しますが、この用語の使用法は単にエラーが「サーバーに接続できません; server1.com」などである可能性があるためです。したがって、エラーの静的部分は次のとおりです。 「サーバーに接続できません」で、動的部分は「server1.com」ですMODULE.NAME
TYPE
CONNECTION.OR.THREAD
TYPE
STATIC MESSAGE
;
DYNAMIC MESSAGE
STATIC