したがって、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