【发布时间】:2014-02-07 00:31:39
【问题描述】:
我正在解析一个日志文件,并且一直在尝试为以下令牌编写正则表达式
sshd[7623]:
我可以匹配 sshd 字符串,但是当匹配左方括号时,perl 只会抛出一个关于缺少右方括号的错误。
如果我尝试同时匹配两者,如下所示,我也不会捕捉到。
$re1='(\\[)(\\d+)(\\])';
$re2='(\\[.*?\\])';
但两者都没有奏效。什么才是合适的搭配方式?
【问题讨论】:
我正在解析一个日志文件,并且一直在尝试为以下令牌编写正则表达式
sshd[7623]:
我可以匹配 sshd 字符串,但是当匹配左方括号时,perl 只会抛出一个关于缺少右方括号的错误。
如果我尝试同时匹配两者,如下所示,我也不会捕捉到。
$re1='(\\[)(\\d+)(\\])';
$re2='(\\[.*?\\])';
但两者都没有奏效。什么才是合适的搭配方式?
【问题讨论】:
这会捕获括号前的单词和括号内的数字:
use warnings;
use strict;
if ('sshd[7623]:' =~ /(\w+)\[(\d+)\]:/) {
print "word=$1 number=$2\n";
}
__END__
word=sshd number=7623
【讨论】:
use strict;
use warnings;
while (<DATA>)
{
if ( /^(\w+)\[(\d+)\]/ )
{
print "Found a $1 line with process ID $2\n";
}
}
__DATA__
sshd[1234]: Foo
imapd[5678]: Bar
sshd[9012]: Baz
pop3d[3456]: Quux
【讨论】: