所以,我有一个在 Rubular 和 CLI 上测试过的正则表达式(使用pry
gem)。这会解析自定义 Apache 日志格式。当我在 pry 中向它提供输入时,它按预期工作(例如$~
已填充)。Rubular 还报告了各种输入行的正确匹配和分组。从下面的代码运行时,没有匹配项。
我也尝试过弄乱角色String.chomp!
,\n
以防万一导致比赛失败,但是各种排列都没有效果。
我敢肯定,更有经验的 Rubyist 可以对此有所了解。
Rubular 链接:http ://www.rubular.com/r/fycHVYZdZz
这是相关的代码、正则表达式和输入——提前致谢:
log_regex = %r{
(?<ip>(([0-9]{1,3}\.){3}[0-9]{1,3}))
\s-\s
(?<src_ip>.*)
-\s
(?<date>\[.*\])
\s
(?<url>".+")
\s
(?<response>\d{3})
\s
(?<length>\d+)
\s
(?<referer>".+")
\s
(?<useragent>".*")
\s(?<host>.*)?
/ix
}
logfile = ARGV[0]
def process_log(log_regex,logfile)
IO.foreach(logfile, 'r') do |line|
line.chomp!
log_regex.match(line) do |m|
puts m['ip']
end
end
end
process_log(log_regex,logfile)
样本输入:
209.123.123.123 - - [05/Jul/2012:11:02:01 -0700] "GET /url/mma/rss2.0.xml HTTP/1.1" 301 0 "-" "FeedBurner/1.0 (http://www.FeedBurner.com)" xml.somewhere.com