以下是内容:
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.*$
匹配 - 对象名称
答案 0 :(得分:43)
但是我需要匹配结果......不在匹配组中......
对于你想要做的事情,这应该有效。 \K
重置比赛的起点。
\bObject Name:\s+\K\S+
您可以执行同样的操作来获取Security ID
个匹配项。
\bSecurity ID:\s+\K\S+
答案 1 :(得分:37)
以下内容对您有用:
[\n\r].*Object Name:\s*([^\n\r]*)
您想要的匹配将在捕获组1中。
[\n\r][ \t]*Object Name:[ \t]*([^\n\r]*)
类似但不允许诸如“blah Object Name:blah”之类的东西,并且如果在“Object Name:”之后没有实际内容,也确保不捕获下一行
答案 2 :(得分:7)
你几乎就在那里。使用以下正则表达式(启用多行选项)
\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:).*$
答案 3 :(得分:2)
根据您使用的语言
,这可能会对您有所帮助(?<=Object Name:).*
这是一个积极的外观断言。可以找到更多信息here
但它不适用于java脚本。在您的评论中,我读到您正在使用它进行logstash。如果您使用GROK解析进行logstash,那么它将起作用。你可以在这里验证自己
答案 4 :(得分:-2)
这是一个快速的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";
}
}
答案 5 :(得分:-2)
这是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']
>>>