ログファイルから情報をパースするためにJavaで正規表現を書くのに苦労しています。
「timeinstant:任意の文字を含む文字列」という構造が1からN回繰り返されているStringがあります。
timeinstantの形式は "dd / mm / yyyy hh:MM:ss:MMMMMM"です(Mはマイクロ秒です)。
私がやろうとしているのは、入ってくる文字列に含まれている最後の瞬間のマイクロ秒を見つけることです。
たとえば、
] 2012/04/02 16:28:51:861819: abcdefg : lwersdgsdg remote=xx.xxx.xx.xxx:yyy3f] accepted and identified as: John 2012/04/02 16:28:51:862987: pump: Received data on connection {John} [
私は…したい m.find()
を指す "987: pump..."
。これを取得するには、先読みで正規表現を使用します。
"(\d{3}:)(?!\d{4}/\d{2}/\d{2}\s\d{2}:\d{2}:\d{2}:\d{6})"
でも今すぐに m.find()
指している 819
(に含まれた 2012/04/02 16:28:51:861819
)。
回答:
回答№1は2あなたの正規表現はあなたが必要とするものに非常に近いです。
否定的な見方では、さまざまなタイムスタンプが複数の文字で区切られていることを忘れていました。だからあなたは追加する必要があります .+
または .*
それを指定するためにあなたの先読みで。
これが必要な正規表現です。
"(\d{3}):(?!.+\d{4}/\d{2}/\d{2}\s\d{2}:\d{2}:\d{2}:\d{6})"
あなたの例では、それはあなたがあなたが探している "987"を与えるでしょう。
回答№2の場合は1
コロンがあとに続く3桁の最後の出現だけに興味があるなら、wouldn "t .*(d{3}:)
作業?
回答№3の場合は0
なぜあなたはちょうど使用しない
(\d{3}: \w+)
次にfind.next()を使用して、次に何も表示されなくなります。