在数组列表中搜索一个模式,如果在perl中找到该模式,则选择一个变量

在数组列表中搜索一个模式,如果在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 =

我试图从数组中获取字符串,但在获取所需输出时遇到了一些问题。我试着使用正则表达式和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 = '(.*?)'/){
    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";
}