0

ログファイルから情報を解析するために Java で正規表現を作成する際に問題に直面しています。

「timeinstant:任意の文字を含む文字列」という構造が1回からN回繰り返される文字列があります。

timeinstant の形式は "dd/mm/yyyy hh:MM:ss:MMMMMM" (M はマイクロ秒) です。

私がやろうとしているのは、着信文字列に含まれる最後の timeinstant のマイクロ秒を見つけることです。

たとえば、文字列で

] 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()を指しています。8192012/04/02 16:28:51:861819

4

3 に答える 3

2

あなたの正規表現はあなたが必要とするものに非常に近いです。

ネガティブルックヘッドでは、異なるタイムスタンプがいくつかの文字で区切られていることを忘れています。したがって、それを指定するには、.+または.*先読みで追加する必要があります。

必要な正規表現は次のとおりです。

"(\\d{3}):(?!.+\\d{4}/\\d{2}/\\d{2}\\s\\d{2}:\\d{2}:\\d{2}:\\d{6})"

あなたの例では、それはあなたが探している「987」をあなたに与えるでしょう。

于 2012-04-13T19:41:54.703 に答える
1

コロンが続く 3 桁の数字の最後の発生のみに関心がある場合は、機能しません.*(\d{3}:)か?

于 2012-04-13T19:30:25.553 に答える
0

なぜあなただ​​けを使用しないのですか

(\\d{3}: \\w+)

次がなくなるまでfind.next()を使用しますか?

于 2012-04-13T19:30:05.303 に答える