Webログを解析し、ログの各部分が有効であることを確認するRubyプログラムを作成しようとしています。私は、ログの要求文字列の場合に対処しようとすると、開始と終了の文字列のほかに二重引用符が追加されています。私は正規表現の形でWebログを作りました。なぜなら、各部分のmake変数を読む方が簡単だからです。ここで私がこれまで持ってWUTです:Webログ要求文字列の二重引用符を取り除く方法
isVal = true
lines = lg.readlines
logLine_regex = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}) - (\w*|-) \[(\d{2})\/(\w{3})\/(\d{4}):(\d{2}):(\d{2}):(\d{2})\s(-0400)\] (".*") (\d+) (\d+|-)$/
lines.each{ |line|
linePos = logLine_regex.match(line)
if linePos == nil
isVal = false
elsif linePos[0] != line.chomp
isVal = false
elsif !((0..255).include?(linePos[1].to_i))
isVal = false
elsif !((0..255).include?(linePos[2].to_i))
isVal = false
elsif !((0..255).include?(linePos[3].to_i))
isVal = false
elsif !((0..255).include?(linePos[4].to_i))
isVal = false
#linePos[5] = Username or hyphen
elsif !((1..31).include?(linePos[6].to_i))
isVal = false
elsif !(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"].include?(linePos[7]))
isVal = false
elsif !((0..9999).include?(linePos[8].to_i))
isVal = false
elsif !((0..23).include?(linePos[9].to_i))
isVal = false
elsif !((0..59).include?(linePos[10].to_i))
isVal = false
elsif !((0..59).include?(linePos[11].to_i))
isVal = false
#linePos[12] = -4000
#linePos[13] = request
elsif !((0..9999).include?(linePos[14].to_i))
isVal = false
#linePos[15] = bytes
else
isVal = true
end
}
は、私は、彼らが追加されている場合は、二重引用符はバックスラッシュを付けることによって逃げることができることを知っているが、私はどのようにそれがRubyでコードにないアイデアを持っていません。助けてください??
問題を表示するためにいくつかのログ行を掲載することができますか? q1、q2、q3、q4、日、月、年、時、分、秒、foo = logLine_regex.match(行)この形式は読みやすさのために考慮する必要があります。 – user60401