Regex для Windows "Сообщение" из источника системного журнала - PullRequest
1 голос
/ 17 июня 2019

У меня журналы Windows агрегируются на сервер системного журнала, который немного портится с форматом, и я пытаюсь поработать с регулярным выражением (PCRE), чтобы немного его переформатировать, чтобы я мог извлечь некоторые пары ключ / значение

Я сам попробовал регулярное выражение, но я застрял в том факте, что в каждом разделе «Сообщение» есть несколько «Заголовков», в которых под ними определены пары ключ / значение.

Примером может быть: An attempt was made to access an object. Subject: Security ID: NT AUTHORITY\SYSTEM Account Name: NAME$ Account Domain: DOMAIN Logon ID: 0x3e7 Object: Object Server: Security Object Type: File Object Name: Z:\PATH\PATH\PATH\file.log Handle ID: 0x9b0 Process Information: Process ID: 0xa84 Process Name: C:\Program Files\PROGRAM\EXECUTABLE.exe Access Request Information: Accesses: ReadData (or ListDirectory) Access Mask: 0x1

Заголовками будут информация о субъекте, объекте и процессе.

Единственный разделитель, где я, похоже, застрял - это \ s независимо от заголовка или пары.

Это сблизило меня. \s([^:\s]+)\:[\s]([^\s]*) но захватывает только первое слово в заголовке или ключе из нескольких слов.

Если / s является единственным разделителем, будет ли это возможно?

1 Ответ

0 голосов
/ 17 июня 2019

Если вам нужны только эти имена заголовков, вы можете использовать чередование и перечислить слова между границами слов \b.

Обратите внимание, что вам не нужно экранировать :, и один \s также может быть написан без квадратных скобок.

\b(Process Information|\S+)\b:\s(\S*)

Объяснение

  • \b Граница слова
  • ( Группа захвата 1
    • Process Information|\S+ Соответствует любому из перечисленных
  • ) Закрыть группу захвата
  • \b:\s Соответствует границе слова, : и символу пробела
  • (\S*) Захват группы 2, совпадающей 0+ раз с непробельным символом

См. Демоверсию regex

...