Ruby Regex用于通用日志格式

嘿伙计们,我正在寻找一个正则表达式,它将“解析” Common Log Format标准的一行,并从中给出7个变量:

  • IP
  • 身分
  • 用户名
  • 时间
  • 请求
  • 状态
  • 对象的大小。

有人已经实现了这个正则表达式吗?

我会先得到时间并先请求,然后这只是一个简单的拆分:

a = '127.0.0.1 user-identifier frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326' time = a.slice!(/\[.*?\]/) request = a.slice!(/".*"/) ip, identity, username, status, size = a.split 

输入:

 127.0.0.1 user-identifier frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 

正则表达式:

 (\S+)\s+(\S+)\s+(\S+)\s+(\[.*?\])\s+(".*?")\s+(\S+)\s+(\S+) 

捕获组的编号如下所示。

分解:

 Group Regex Match #1 IP (\S+) 127.0.0.1 #2 Identity (\S+) user-identifier #3 Username (\S+) frank #4 Time (\[.*?\]) [10/Oct/2000:13:55:36 -0700] #5 Request (".*?") "GET /apache_pb.gif HTTP/1.0" #6 Status (\S+) 200 #7 Size (\S+) 2326 each separated by a \s+ 

我也想出了我自己的正则表达式,它也分解了动词,uri和HTTP版本。

 ^([\d\.]*)\s([\w|-]*)\s([\w|-]*)\s\[(.*)\]\s\"([\w]*)\s(.*)\s(.*)\"\s([\d]*)\s([\d]*)$