输入
[security] [client 198.66.91.7] [domain testphp.example.com] [200] [/apache/20160503/20160503-0636/20160503-063628-Vyh-LH8AAAEAAE6zC@AAAAAD] (null)
所需的输出
/apache/20160503/20160503-0636/20160503-063628-Vyh-LH8AAAEAAE6zC@AAAAAD
这是我到目前为止所拥有的
'.*?\[.*?\].*?\[.*?\].*?\[.*?\].*?\[.*?\].*?\[(.*?)\]'
我的Perl代码。
#!/usr/bin/perl
use feature 'say';
$txt='[modsecurity] [client 199.66.91.7] [domain testphp.vulnweb.com] [200] [/apache/20160503/20160503-0636/20160503-063628-Vyh-LH8AAAEAAE6zC@AAAAAD] (null)';
$re=''.*?\[.*?\].*?\[.*?\].*?\[.*?\].*?\[.*?\].*?\[(.*?)\]'';
if ($txt =~ m/$re/is)
{
$sbraces1=$1;
say $1;
}
输出
/apache/20160503/20160503-0636/20160503-063628-Vyh-LH8AAAEAAE6zC@AAAAAD
我认为我的正则表达式很乱吗?也许是另一种方式?
谢谢
我也将使用split ...或比您正在使用的正则表达式更通用的正则表达式:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
my $data = '[security] [client 198.66.91.7] [domain testphp.example.com] [200] [/apache/20160503/20160503-0636/20160503-063628-Vyh-LH8AAAEAAE6zC@AAAAAD] (null)';
my @fields = $data =~ /(?:\[(.*?)\])+/g;
print Dumper(\@fields);
您得到的输出是:
$VAR1 = [
'security',
'client 198.66.91.7',
'domain testphp.example.com',
'200',
'/apache/20160503/20160503-0636/20160503-063628-Vyh-LH8AAAEAAE6zC@AAAAAD'
];
因此,返回数组的第五个元素就是您想要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句