Как извлечь имя программы из сообщения системного журнала с помощью регулярного выражения? У меня есть модуль обработки потока Java, который принимает регулярные выражения для обработки сообщений системного журнала.
Строка журнала может быть:
2013-10-14T22:05:29+00:00 hostname sshd[6359]: Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname sshd:3322 Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname sshd/6359 Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname sshd Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname SSHD[1133] Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname SSH.D[6359]: Connection closed by 192.168.1.10
Процесс извлечения строки должен быть следующим: возьмите третью подстроку, разделенную пробелом, и извлеките подстроку, оканчивающуюся на [
, :
, /
или пробел.
Таким образом, в первых четырех примерах журнала извлеченная строка будет sshd
, пятая SSHD
и шестая SSH.D
. Возможно ли это с помощью регулярного выражения?
Редактировать:
То, что я пробовал, это ((?:[A-Za-z][A-Za-z0-9_.-]+))
, и, похоже, оно работает, но, честно говоря, я изменил пример регулярного выражения и использовал онлайн-инструмент, чтобы настроить его, чтобы он соответствовал моему варианту использования, но я не уверен, как именно это работает.