如何在Perl中处理下面的模式匹配

时间:2015-06-04 06:00:27

标签: regex perl pattern-matching special-characters

如何进行下面提到的模式匹配?

下面的输入是一个数组:

@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

2 个答案:

答案 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