[英]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.