RegEx для соответствия от одного до трех слов после ключевого слова - PullRequest
2 голосов
/ 22 апреля 2019

У меня есть системный журнал как:

Apr 22 11:52:44 localhost systemd: Stopped logstash. 
Apr 22 11:52:07 localhost systemd: Started Getty on tty1. 
Apr 22 11:52:07 localhost systemd: Started Hostname Service. 
Apr 22 11:52:07 localhost systemd: Started Import network configuration from initramfs.

Я хочу получить 3 слова после статуса (короткое название программы).

Мое решение:

"\bsystemd:\s+\S+\s\K\S+\s\S+\s\S+"

Но имя программы может быть меньше 3 слов (например, logstash в моем журнале), поэтому мне нужно регулярное выражение, чтобы соответствовать 1, 2 или 3 словам в зависимости от длины строки.

Как мне решить эту проблему?

1 Ответ

1 голос
/ 22 апреля 2019

Вы можете использовать

\bsystemd:\s+\S+\s\K\S+(?:\s\S+){0,2}

См. Демонстрационную версию regex .

Часть \S+(?:\s\S+){0,2} выполняет свою работу: она соответствует 1+ непробельным символам, за которыми следуютот 0 до 2 повторений 1+ пробелов, за которыми следуют 1+ непробельных символов.

См. график регулярных выражений:

enter image description here

enter image description here

...