Я определил регулярное выражение для журнала доступа Apache, как показано ниже:
val apacheLogPattern = """
^(\S+) (\S+) (\S+) \[([\w:/]+\s[+\-]\d{4})\] "(\S+)\s?(\S+)?\s?(\S+)?" (\d{3}|-) (\d+|-)\s?"?([^"]*)"?\s?"?([^"]*)?"?$
""".r
И функцию для анализа журнала:
def parse_log(line: String) = {
line match {
case apacheLogPattern(ipAddress, clientIdentity, userId, dateTime, method, endPoint,
protocol, responseCode, contentSize, browser, somethingElse) => "match"
}
}
val p = """66.249.69.97 - - [24/Sep/2014:22:25:44 +0000] "GET /071300/242153 HTTP/1.1" 404 514 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"""
parse_log(p)
Вызов функции разбора дает MatchError
scala.MatchError: 66.249.69.97 - - [24 / Sep / 2014: 22: 25: 44 +0000] "GET / 071300/242153 HTTP / 1.1"404 514" - "" Mozilla / 5.0 (совместимо; Googlebot / 2.1; + http://www.google.com/bot.html)" (класса java.lang.String) в .parse_log (: 13) ... 28 исключено
Может ли кто-нибудь помочь мне, где регулярное выражение scala идет не так?