2013-05-31 35 views
1

我解析下的Apache日誌條目使用RegEX解析Apache日誌時出錯?

59.167.203.103 - - [28/May/2013:03:12:47 +0000] "POST /some/some.htm HTTP/1.1" 200 1187 "-" "xyzf/2.00.16 xyzNetwork/609.1.4 xyzwin/13.0.0" 

下面的正則表達式和它的做工精細給出。

String logentrypattern = "^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \"(.+?)\" (\\d{3}) (\\d+) \"([^\"]+)\" \"([^\"]+)\""; 

但在幾個項目responsebytes是「 - 」,而不是一定的價值,這是給我下面erorr,說無法解析。 plz幫助

Bad log entry (or problem with RE?): 
89.178.46.54 - - [24/May/2013:17:04:59 +0000] "PUT /xyz-pmp/xyz-pmp.htm HTTP/1.1" 200 - "-" "kdm/1.0" 

回答

1

你可以試試這個:

^([\\d.]+) (\\S+) (\\S+) \\[([\\w:\/]+\\s[+\-]\\d{4})\\] \"(.+?)\" (\\d{3}) (\\d+|-) \"([^\"]+)\" \"([^\"]+)\" 
                       ^^ 

我加了一點,你可以有一個破折號。也許最好是有一個\\S+塊代替嗎?那麼,這完全取決於你在做什麼。如果意圖只接受帶有數字的條目,那麼您的正則表達式按預期工作。如果只是爲了捕獲條目的不同部分,請確保您知道數據的結構以及它們可以提供給您的不同形式。