웹 로그를 구문 분석하고 로그의 각 부분이 올바른지 확인하는 루비 프로그램을 작성하려고합니다. 로그의 요청 문자열에서 대소 문자를 처리하려고하면 시작 및 끝 부분 외에 추가로 큰 따옴표가 있습니다. 웹 로그를 정규 표현식으로 만들었습니다. 왜냐하면 각 부분에 대한 변수를 만드는 것이 더 쉽기 때문입니다. 여기에 지금까지 가지고 wut의 :웹 로그 요청 문자열에 추가 큰 따옴표 제거하기
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
}
나는 그들이 추가하는 경우 따옴표는 백 슬래시를 앞에 탈출 수 있다는 것을 알고,하지만 난 어떻게 루비에서 코딩하는 생각이 없습니다. 도와주세요??
몇 가지 예제 로그 라인을 게시하여 문제를 표시 할 수 있습니까? 또한이 형식을 가독성을 위해 고려해야 할 수도 있습니다. q1, q2, q3, q4, day, mon, year, hour, minute, second, foo = logLine_regex.match (line) – user60401