Ниже приведен пример журнала, и я пытаюсь создать отдельный столбец для каждого типа данных:
unicomp6.unicomp.net - - [01/Jul/1995:00:00:14 -0400] "GET /shuttle/countdown/count.gif HTTP/1.0" 200 40310
хост - дата - URL - статус - байт
Я могу получить следующее:
"""^([^(\s|,)]+)"""
"""\[(\d\d/\w{3}/\d{4}:\d{2}:\d{2}:\d{2}\s-\d{4})]"""
"""^.*\w+\s+([^\s]+)\s+HTTP.*"""
но я не могу извлечь статус HTTP (200) и байт (40310), и я пробовал много регулярных выражений.
например, я пробовал следить за статусом: """[0-9][0-9][0-9]"""
и """/d/d/d""
и многие другие.
Редактировать: (Ответ) Статус = """\d+(?=\s\d+$)"""
байт = \s+(\d+)$
Вы можете использовать это регулярное выражение с 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+ цифрампожалуйста, проверьте сейчас в ответе, как в демо
Используйте просмотр вперед, он отлично работает, чтобы поймать статус 200:
\d+(?=\s\d+$)
введите здесь описание изображения
эй, это работает как шарм, не могли бы вы помочь мне с размером байта?
Но это будет фиксировать только значение статуса, а как насчет других значений, таких как host
, отметка времени ,
url` и т. д.
Я думаю, что митохондрия уже знает, как извлечь хост, отметку времени и URL-адрес, указанные в его вопросе.
для извлечения размера байта используйте это регулярное выражение: \d+$
эй, я думаю, что открытых квадратных скобок больше, чем закрытых, можете еще раз проверить?