我将Windows日志汇总到syslog服务器,该服务器有点混乱了格式,并且我正在尝试使用正则表达式(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是唯一的分隔符,这可能吗?
答案 0 :(得分:0)
如果只希望这些标题名称,则可以使用alternation并列出单词边界\b
之间的单词。
请注意,您不必转义:
,也可以在不带方括号的情况下编写单个\s
。
\b(Process Information|\S+)\b:\s(\S*)
说明
\b
字边界(
捕获组1
Process Information|\S+
匹配任何列出的)
关闭捕获组\b:\s
匹配单词边界,:
和空格字符(\S*)
捕获第2组匹配0+倍的非空白字符