在数组列表中搜索一个模式,如果在perl中找到该模式,则选择一个变量
我试图从数组中获取字符串,但在获取所需输出时遇到了一些问题。我试着使用正则表达式和if条件,但这不是很有帮助 我的阵列 现在我只需要数组中“queueName=”后面的字符串,我希望它们是uniq并排序的在数组列表中搜索一个模式,如果在perl中找到该模式,则选择一个变量,perl,Perl,我试图从数组中获取字符串,但在获取所需输出时遇到了一些问题。我试着使用正则表达式和if条件,但这不是很有帮助 我的阵列 现在我只需要数组中“queueName=”后面的字符串,我希望它们是uniq并排序的 JP.AP.ACH.REQUEST JP.AP.ADAPTER.REQUEST JP.AP.SERVICE.FAILURE JP.AP.SERVICE.REQUEST JP.EXCEPTION 我试过: foreach $_ (@array){ if (/ .* queueName =
JP.AP.ACH.REQUEST
JP.AP.ADAPTER.REQUEST
JP.AP.SERVICE.FAILURE
JP.AP.SERVICE.REQUEST
JP.EXCEPTION
我试过:
foreach $_ (@array){
if (/ .* queueName = '(.*?)'/){
print ("$1\n");
}
}
我认为您需要使用queueName=
的数组来获取过滤后的数组,然后将这些过滤后的结果进行散列,以仅获取最后的内容并丢弃重复项,然后从散列中获取密钥并将其保存
这看起来大概像
my @rray = # ...however you get it
my %uniques = map {
my $bite = MOREREGEX on $_;
$bite => 1
} grep(SOMEREGEX,@rray);
return sort(keys %uniques)
编辑:虽然我认为使用grep
可以更清楚地了解程序员的意图(在我的解决方案中),但是可以集成@Bruce回答的内容以避免使用它
my @rray = # ...however you get it
my %uniques = map {
my ($junk,$want) = split('queueName = ',$_);
$want => 1
} @rray;
return sort(keys %uniques)
因为当分割实际上没有发生时,$want
是'
,而未定义的键不会被键拉出
错误修复:实际上,'
键在那里,但是它总是在排序之后的第一个,并且可以被shift
关闭。请提供您尝试过的正则表达式。我使用的是foreach$(数组){if(/.*queueName='(.*)/{print($1\n”);}
my %uniques;
my $string_pattern = "queueName = ";
foreach (@string_array)
{
if($_ =~ m/$string_pattern/)
{
my ($junk, $pattern) = split($string_pattern, $_);
$uniques{$pattern} = 1;
}
}
foreach (sort keys %uniques)
{
print $_."\n";
}
my %uniques;
my $string_pattern = "queueName = ";
foreach (@string_array)
{
if($_ =~ m/$string_pattern/)
{
my ($junk, $pattern) = split($string_pattern, $_);
$uniques{$pattern} = 1;
}
}
foreach (sort keys %uniques)
{
print $_."\n";
}