Назад | Перейти на главную страницу

Выражение регулярного выражения Perl

У меня есть следующая строка, созданная файлом журнала сервера. Я использую простой коррелятор событий (который использует регулярное выражение perl) для управления строками:

18:37:31 643.65.123.123 []sent /home/mydomain/public_html/court-954fdw/Chairman-confidential-video.mpeg 226 court-954fdw@mydomain.com 256

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

НОТА: значения, которые использует SEC, извлекаются из данных, содержащихся в скобках:

pattern=sent \/home\/mydomain\/public_html\/(.*)\/(.*)

Однако мне не удалось разобрать только имя файла, которое в этом случае будет: Chairman-confidential-video.mpeg.

В настоящее время существующий шаблон, который я использую, вытягивает всю строку:

Chairman-confidential-video.mpeg 226 court-954fdw@mydomain.com 256

чего я не хочу. Любая помощь очень ценится.

Я бы, наверное, использовал:

pattern=sent \/home\/mydomain\/public_html\/(.*)\/(\S+).*

Это должно извлечь все символы, кроме пробелов, для последнего совпадения захвата, а остальные оставить для совпадения без захвата.

Я бы использовал следующее:

pattern=sent \/home\/mydomain\/public_html\/(.*?)\/\(.* ?)\S*.*$

Для более явного нежадного сопоставления. Теперь ваш результат будет в 2 доллара. Это предполагает, что вы не можете жестко кодировать что-либо ниже public_html. Это оставляет конечное пространство.

Другие ответы не предполагают пробелов в имени файла, что является довольно рискованным предположением. Более безопасная ставка - не использовать косую черту в имени файла, поскольку это недопустимо в Linux:

pattern=sent \/home\/mydomain\/public_html\/([^\/]+)\/([^\/]+) [0-9]+ \S+@\S+ [0-9]+$

Проверено на https://regex101.com/