Извлечение данных веб-журнала с использованием регулярных выражений

#regex #scala #logging

#регулярное выражение #scala #ведение журнала

Вопрос:

Ниже приведен пример журнала, и я пытаюсь создать отдельный столбец для каждого типа данных:

 unicomp6.unicomp.net - - [01/Jul/1995:00:00:14 -0400] "GET /shuttle/countdown/count.gif HTTP/1.0" 200 40310
 

хост — дата — URL — статус — байт

Я могу получить следующее:

  1. хост = """^([^(s|,)] )"""
  2. временная метка = """[(dd/w{3}/d{4}:d{2}:d{2}:d{2}s-d{4})]"""
  3. URL = """^.*w s ([^s] )s HTTP.*"""

но я не могу извлечь HTTP status (200) и byte (40310), и я перепробовал много регулярных выражений. например, я пробовал следовать для status: """[0-9][0-9][0-9]""" и """/d/d/d"" и многие другие.

Редактировать: (Ответ) Статус = """d (?=sd $)""" байт = s (d )$

Ответ №1:

Используйте look ahead, он отлично работает для отслеживания статуса 200:

 d (?=sd $)
 

введите описание изображения здесь

Комментарии:

1. эй, это работает как шарм, можете ли вы также помочь мне с размером байта?

2. Но это будет фиксировать только значение статуса, а как насчет других значений, таких как host , URL-адрес метки времени и т. Д

3. Я думаю, что mitochoondria уже знает, как извлечь хост, временную метку, URL, указанный в его вопросе.

4. для извлечения размера байта используйте это регулярное выражение: d $

Ответ №2:

Вы можете использовать это регулярное выражение с 4 именованными группами захвата:

 ^(?<host>S )[^[] [(?<ts>d{2}/w{3}/d{4}(?::d{2}){3})[^]]*][^"]*"[A-Z]{3,} (?<url>S )[^"]*"s (?<status>d )
 

Демонстрация регулярных выражений

Подробности регулярных выражений:

  • ^ : Начать
  • (?<host>S ) : Группа host , которая содержит более 1 символов, не содержащих пробелов
  • [^[] [ : Сопоставьте 1 не [ символы, за которыми следует [
  • (?<ts>d{2}/w{3}/d{4}(?::d{2}){3}) : Группа ts , соответствующая подстроке даты и времени
  • [^]]*] : Сопоставьте 0 ] символов, за которыми следует ]
  • [^"]*" : Сопоставьте 0 " символов, за которыми следует "
  • [A-Z]{3,} : Сопоставьте http-глагол, например GET , PUT , POST , DELETE и т. Д
  • (?<url>S ) : url группировка для сопоставления с 1 символами, не содержащими пробелов
  • [^"]*" : Сопоставьте 0 " символов, за которыми следует "
  • s : Сопоставьте 1 пробельные символы
  • (?<status>d ) : status группа для сопоставления 1 цифр

Комментарии:

1. эй, я думаю, что открытых квадратных скобок больше, чем закрытых, можете ли вы проверить еще раз?

2. пожалуйста, проверьте сейчас в ответе, как в демонстрации