Regex 正则表达式匹配多主机的扩展通用日志格式

Regex 正则表达式匹配多主机的扩展通用日志格式,regex,Regex,我正在尝试编写一个正则表达式来匹配扩展的通用日志格式。我有一个表达式来匹配大多数日志条目,但当列出多个主机时,它会失败 以下是我目前的表达: ([^ ]*) ([^ ]*) ([^ ]*) \[([^]]*)\] "([^"]*)" ([^ ]*) ([^ ]*) "([^"]*)" "([^"]*)" 这成功地匹配了标准日志条目。例如: 24.58.227.240 - - [22/Sep/2011:00:00:00 +0000] "GET /rss/merchant/airsoftpost.

我正在尝试编写一个正则表达式来匹配扩展的通用日志格式。我有一个表达式来匹配大多数日志条目,但当列出多个主机时,它会失败

以下是我目前的表达:

([^ ]*) ([^ ]*) ([^ ]*) \[([^]]*)\] "([^"]*)" ([^ ]*) ([^ ]*) "([^"]*)" "([^"]*)"
这成功地匹配了标准日志条目。例如:

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)"
有人能帮我修复我的表达式以匹配给定日志项的任意数量的主机吗


谢谢。

按照您的正则表达式,您可以更改:

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

想法是只改变第一组:

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

作为一个选项,请尝试以下正则表达式模式:

([\d.\s,]*)([^]*)([^]*)\[([^]*)\]”([^“]*)([^]*)([^]*)([^]*)([^“]*)”([^“]*)”

第一个捕获组现在将捕获所有数字、句点、(白色)空格和任意数量的重复

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