83

以下是内容:

Subject:
    Security ID:        S-1-5-21-3368353891-1012177287-890106238-22451
    Account Name:       ChamaraKer
    Account Domain:     JIC
    Logon ID:       0x1fffb

Object:
    Object Server:  Security
    Object Type:    File
    Object Name:    D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log
    Handle ID:  0x11dc

我需要捕获该Object Name:行中单词之后的单词。这是D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log

我怎样才能做到这一点?

^.*\bObject Name\b.*$匹配 - 对象名称

4

6 回答 6

61

但我需要比赛结果......不在比赛组中......

对于您正在尝试做的事情,这应该有效。\K重置比赛的起点。

\bObject Name:\s+\K\S+

你可以做同样的事情来获得你的Security ID比赛。

\bSecurity ID:\s+\K\S+
于 2013-10-05T02:51:45.833 回答
59

以下内容应该适合您:

[\n\r].*Object Name:\s*([^\n\r]*)

工作示例

您想要的匹配将在捕获组 1 中。


[\n\r][ \t]*Object Name:[ \t]*([^\n\r]*)

将是相似的,但不允许使用诸如“blah Object Name: blah”之类的内容,并且如果“Object Name:”之后没有实际内容,请确保不要捕获下一行

于 2013-10-05T02:18:26.997 回答
16

您快到了。使用以下正则表达式(启用多行选项)

\bObject Name:\s+(.*)$

完整的比赛将是

Object Name:   D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log

而捕获的第一组将包含

D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log

如果要直接捕获文件路径,请使用

(?m)(?<=\bObject Name:).*$
于 2013-10-05T02:21:32.120 回答
11

根据您使用的语言,这可能对您有用:

(?<=Object Name:).*

这是一个积极的回溯断言。更多信息可以在这里找到。

但它不适用于 JavaScript。在您的评论中,我读到您将它用于logstash。如果您使用 GROK 解析 logstash,那么它会起作用。您可以在此处自行验证:

https://grokdebug.herokuapp.com/

在此处输入图像描述

于 2016-09-20T10:56:57.373 回答
-3

这是一个快速的 Perl 脚本,可以满足您的需要。它需要一些空格。

#!/bin/perl

$sample = <<END;
Subject:
  Security ID:        S-1-5-21-3368353891-1012177287-890106238-22451
  Account Name:       ChamaraKer
  Account Domain:     JIC
  Logon ID:       0x1fffb

Object:
  Object Server:  Security
  Object Type:    File
  Object Name:    D:\\ApacheTomcat\\apache-tomcat-6.0.36\\logs\\localhost.2013- 07-01.log
  Handle ID:  0x11dc
END

my @sample_lines = split /\n/, $sample;
my $path;

foreach my $line (@sample_lines) {
  ($path) = $line =~ m/Object Name:([^s]+)/g;
  if($path) {
    print $path . "\n";
  }
}
于 2013-10-05T02:35:52.157 回答
-3

这是一个 Python 解决方案。

import re

line ="""Subject:
    Security ID:        S-1-5-21-3368353891-1012177287-890106238-22451
    Account Name:       ChamaraKer
    Account Domain:     JIC
    Logon ID:       0x1fffb

Object:
    Object Server:  Security
    Object Type:    File
    Object Name:    D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log
    Handle ID:  0x11dc"""



regex = (r'Object Name:\s+(.*)')
match1= re.findall(regex,line)
print (match1)

*** Remote Interpreter Reinitialized  ***
>>> 
['D:\\ApacheTomcat\x07pache-tomcat-6.0.36\\logs\\localhost.2013-07-01.log']
>>> 
于 2017-08-01T17:35:03.423 回答