1

我在 Perl 中有一个数组,它的值如下:

$Array[0] = "[a][b][c] good bad";
$Array[1] = "[d] apple";
$Array[2] = "[e][f] mango ";
$Array[3] = "[g] capgemini";

我需要一个常规的 exp 来查找[].
我写了这个:

my @matched = grep {$_ ne ""} map { m/\[(.*?)\]/; $1; } @Array;

但是,这只会找到第一个匹配项,例如afrom $Array[0]efrom $Array[2]
我想a,b,c$Array[0].

4

1 回答 1

3

您对匿名哈希的使用和符号的省略令人困惑。不过,这对我有用:

#!/usr/bin/perl
use warnings;
use strict;

use Data::Dumper;

my @Array;
$Array[0]= "[a][b][c] good bad";
$Array[1]= "[d] apple";
$Array[2]= "[e][f] mango ";
$Array[3]= "[g] capgemini";
my @matched = map { m/\[(.*?)\]/g } @Array;
print Dumper \@matched;

主要技巧是使用/g全局匹配选项并让匹配返回所有匹配项。

于 2013-04-09T08:54:49.693 回答