2017-04-17 8 views
1

最近、私は正規表現を学びます。Logstash Grokを使用してファイル名を分割するにはどうすればよいですか?

私は、次のファイル名

PE-run1000hbgmm3f1-job1000hbgmm3dt-Output-Workflow-1000hbgmm3fb-22.07.17.log 

を持っている私は...

(?<logtype>[^-]+)-(?<run_id>[^-]+)-(?<job_id>[^-]+)-(?<capability>[^(0-9\.0-9\.0-9)]+) 

logtype: PE 
run_id: run1000hbgmm3f1 
job_id: job1000hbgmm3dt 

これがそう仕事を得ることができるよしかし、私は

capability: Output-Workflow- 

を取得しています。..私はそれが欲しいですが

capability: Output-Workflow-1000hbgmm3fb 

...つまり、タイムスタンプまでのjob_idの後のすべてのテキストHH.mm.ss.助けてください?ありがとう!

+0

なぜ[[^ - ] + 'を使用しないのですか? – kennytm

+0

@Chris:あなたが役に立つと判明した場合、回答をupvotingしてください。 –

答えて

0

のシーケンスのネゲートされた文字クラスを無効にすることができないためです。 [^(0-9\.0-9\.0-9)]は、(、数字、.および)以外の任意の1文字に一致します。

(?<capability>[^(0-9\.0-9\.0-9)]+)(?<capability>.*?)-\d{2}\.\d{2}\.\d{2}に置き換えて正しい値を取得することができます。今

enter image description here

(?<capability>.*?)-\d{2}\.\d{2}\.\d{2}は、任意の0+文字に一致する(と「機能」のグループにそれらをキャプチャ)(*?は怠惰な数量詞があるので)できるだけ少ないようになるの最初の発生まで-に続いて2桁、続いて2桁のドット(\.)の3つのシーケンスが続きます。

regex demo(regex101.com)を参照してください。

関連する問題