scala apache лог доступа regex не работает - PullRequest
0 голосов
/ 21 сентября 2019

Я определил регулярное выражение для журнала доступа 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 идет не так?

...