簡體   English   中英

正則表達式將擴展的通用日志格式與多個主機匹配

[英]Regex Match Extended Common Log Format with Multiple Host

我正在嘗試編寫一個正則表達式來匹配擴展的通用日志格式。 我有一個表達式可以匹配大多數日志條目,但是當列出多個主機時,它會失敗。

這是我目前的表情:

([^ ]*) ([^ ]*) ([^ ]*) \[([^]]*)\] "([^"]*)" ([^ ]*) ([^ ]*) "([^"]*)" "([^"]*)"

這成功匹配標准日志條目。 例如:

24.58.227.240 - - [22/Sep/2011:00:00:00 +0000] "GET /rss/merchant/airsoftpost.com HTTP/1.1" 200 1880 "-" "Apple-PubSub/65"

但是,某些日志條目包含多個主機IP(以逗號分隔):

10.64.233.43, 69.171.229.245 - - [22/Sep/2011:00:00:00 +0000] "GET /view/thesanctuary.co.uk HTTP/1.1" 206 7289 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"

有人可以幫我修復表達式,以匹配給定日志項目的任意數量的主機嗎?

謝謝。

遵循正則表達式,您可以更改:

([^ ]*) ([^ ]*) ([^ ]*) \[([^]]*)\] "([^"]*)" ([^ ]*) ([^ ]*) "([^"]*)" "([^"]*)"

([^-]*) ([^ ]*) ([^ ]*) \[([^]]*)\] "([^"]*)" ([^ ]*) ([^ ]*) "([^"]*)" "([^"]*)"
   ^--- here, match until first dash

這個想法是只更改第一組:

([^ ]*)   ---> matches until the first space (change this)
([^-]*)   ---> matches until the first hyphen

作為一種選擇,嘗試以下正則表達式模式:

([\\d.\\s,]*) ([^ ]*) ([^ ]*) \\[([^]]*)\\] "([^"]*)" ([^ ]*) ([^ ]*) "([^"]*)" "([^"]*)"

現在,第一個捕獲組將捕獲所有數字,句點,(空格),任意數量的重復。

請參閱工作演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM