需要解析一些以空格(" "
)作为分隔符的日志,并观察双引号或单引号。
例如
id=firewall time="2010-05-09 16:07:21 UTC" 1.1.1.1 ...
应该解析为
id=firewall
time="2010-05-09 16:07:21 UTC"
1.1.1.1
日志是
尝试使用Text :: CSV_XS,因为它比基于纯Perl的解析器要快得多。但是,下面的代码不能满足我的期望,因为日志不是有效的csv字符串。
use Text::CSV_XS;
$a = 'id=firewall time="2010-05-09 16:07:21 UTC"';
$userDefinedSeparator = Text::CSV_XS->new({sep_char => " "});
print "$userDefinedSeparator\n";
$userDefinedSeparator->parse($a);
my $e;
foreach $e ($userDefinedSeparator->fields) {
print $e, "\n";
}
是否有可以解析上述日志的快速解析器?最好将Text :: CSV_XS配置为进行所需的解析。
感谢@ThisSuitIsBlackNot,他建议重写此问题。
这是我之前给出的答案,以及您在此问题中显示的新数据。
我对上一个问题的问题是,您仅显示了key=value
配对,因此,我假设这就是您数据中的全部内容。
希望这对您有用。
use strict;
use warnings;
my $string = 'id=firewall time="2010-05-09 16:07:21 UTC" 1.1.1.1 ...';
my @fields = $string =~ / (?: "[^"]*" | \S )+ /xg;
print "$_\n" for @fields;
输出
id=firewall
time="2010-05-09 16:07:21 UTC"
1.1.1.1
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句