如何进行下面提到的模式匹配?
下面的输入是一个数组:
@array=("gs : asti:34:234", "gs : asti:344:543:wet");
我使用foreach loop
以便我拆分它们并将它们推入数组中。
帮我解决以下问题。
foreach(@array)
{
if($_ =~ /gs/ig)
{
my @arr2 = split(":",$_); #Splitting the matched pattern
push(@y,$arr2[1]);
}
}
实际输出为:asti , asti
期望/预期输出:asti:34:234 , asti:344:543:wet
答案 0 :(得分:1)
使用正则表达式捕获而不是拆分可以简化代码,无论如何你已经使用了正则表达式,所以为什么不保存一步:
my @array = ("gs : asti:34:234", "gs : asti:344:543:wet");
my @y = ();
foreach my $e (@array) {
push @y, $1 if $e =~ m/^gs : (.*)$/i;
}
答案 1 :(得分:0)
你可以这样做,split字符串只有两部分:
use strict;
use warnings;
my @array=('gs : asti:34:234', 'gs : asti:344:543:wet');
foreach(@array)
{
if($_ =~ m/gs/ig)
{
my @arr2 = split(":", $_, 2);
$arr2[1] =~ s/^\s+//; #to remove the white-space
push(my @y,$arr2[1]);
print "@y\n";
}
}
输出:
asti:34:234
asti:344:543:wet