Задать вопрос
@lex63
Начинающий web-разработчик

Regex. Как сделать разбор строки с конца?

Здравствуйте!
Есть строка из лога.
Необходимо её разобрать с помощью регулярных выражений.
Как сделать так, чтобы разбор строки начинался с конца?
Вопрос может глупый и простой, но не смог найти ответ.
Прошу помощи знатоков.

Пример для более конкретного понимания необходимого.
Строка из лога Apache
127.0.0.1 - - [28/Jul/2006:10:27:32 -0300] "GET /hidden/ HTTP/1.0" 404 7218
Нужно найти значения в таком порядке:
Ответ сервера: 404
Тип запроса: GET
Дата: 28/Jul/2006:10:27:32 -0300
IP-адрес: 127.0.0.1
  • Вопрос задан
  • 1139 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 3
@Zolg
для задачи из примера абсолютно не нужно вычислять регулярку справа налево
нужно просто захваченные группы вывести в нужном вам порядке не $1 $2 $3, а $3 $1 $2, к примеру. а еще лучше сделать их именованными
Ответ написан
@Nujabes37
:DEATH
Хотите прикол ?))

Вот, что лежит в моем test.txt:

127.0.0.1 - - [28/Jul/2006:10:27:32 -0300] "GET /hidden/ HTTP/1.0" 404 7218
127.0.4.3 - - [28/Jul/2006:10:27:32 -0300] "GET /hidden/ HTTP/1.0" 404 7218
127.0.0.2 - - [30/Jun/2026:10:27:32 -0300] "POST /hidden/ HTTP/1.0" 200 7218


Запускаем следующую команду:

cat test.txt | sed 's/.*\(^[0-9]*.[0-9]*.[0-9]*.[0-9]*\)\s-\s-\s\[\([0-9]*\/[A-Z][a-z]*\/[0-9]*\:[0-9]*\:[0-9]*\:[0-9]*\s\-[0-9]*\)]\s\"\([A-Z]*\s\)\/[a-z]*\/\s[A-Z]*\/[0-9].[0-9]"\s\([0-9]*\s\).*/Ответ сервера: \4\nТип запроса: \3\nДата: \2\nIP-адрес: \1\n/g'


Получаем:

Тип запроса: GET
Дата: 28/Jul/2006:10:27:32 -0300
IP-адрес: 127.0.0.1

Ответ сервера: 404
Тип запроса: GET
Дата: 28/Jul/2006:10:27:32 -0300
IP-адрес: 127.0.4.3

Ответ сервера: 200
Тип запроса: POST
Дата: 30/Jun/2026:10:27:32 -0300
IP-адрес: 127.0.0.2


Читал ваши комментарии, так и не понял зачем вам начинать поиск с конца строки :/
Ответ написан
DevMan
@DevMan
чот я, как и другие, не понял зачем читать с конца. выводить же можно как угодно.
вот вам пример.

да и саму регулярку можно спокойно упростить.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
вопрос глупый: регулярки "с конца" решаются классически - "переворачиваются и сначала", в основном это в поиске,например" *ля" если найти для всяких "*ланов"

можешь посмотреть, как справились коллеги
https://gist.github.com/hreeder/f1ffe1408d296ce0591d
https://github.com/richardARPANET/nginx-access-log...
https://coderwall.com/p/snn1ag/regex-to-parse-your...
https://stackoverflow.com/questions/56480343/parsi...

+ можно дать админу пива / по шапке и попросить настроить в более удобном виде

+ еще есть техники с простым split
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы