我试图将第一组存储在@a1
中,将第二组存储在@a2
中
my $string = "abc123def456abc321def654";
my (@a1,@a2) = $string =~m/abc(\d+)def(\d+)/g;
$, = "\n";
print @a1;
结果为
123 456 321 654
,然后@a2
为空。但是我想要结果是@a1 = 123 321
; @a2 = 456 654
对于这个结果,我尝试使用hash,因为要存储的键是第一个分组,而值是第二个分组,但是问题是重复项被删除了。使用单个正则表达式匹配的任何可行方法?我在模式匹配中尝试了
eval group
。我从@a1
获得了正确的结果,但是@a2
出了错。不知道是什么问题?my (@a1, @a2);
$string =~m/abc(\d+) (?{push @a1, $1}) def(\d+)(?{push @a2,$2 }) \G/x;
@a1
结果为1234
321
666
@a2
结果为4567
456
45
4
654
65
6
777
77
7
最佳答案
您可以这样做:
use List::Util 'pairs';
my @a12 = pairs $string =~ /abc(\d+)def(\d+)/g;
my @a1 = map $_->[0], @a12;
my @a2 = map $_->[1], @a12;
要么
use List::MoreUtils 'part';
my $i = 0;
my @part = part { $i++ % 2 } $string =~ /abc(\d+)def(\d+)/g;
my @a1 = @{ $part[0] };
my @a2 = @{ $part[1] };
或者只是跳过设置@ a1和@ a2并使用@ a12或@part中的数据。