Ruby Regex用于通用日志格式

时间:2013-11-18 13:19:28

标签: ruby regex

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

  • IP
  • 身份
  • 用户名
  • 时间
  • 请求
  • 状态
  • 物体的大小。

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

3 个答案:

答案 0 :(得分:1)

<强>输入:

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+

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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