关于Perl中分割用法的问题

时间:2010-12-24 07:21:23

标签: regex arrays perl split concatenation

我写了一个小脚本来使用split()

use strict;
use warnings;
use Data::Dumper;

my $fh = \*DATA; 


while(my $line = <$fh>) 
{ 
    my @values = split(':', $line);

    foreach my $val (@values) {

      print "$val\n";
    }
} 

__DATA__   
1 : Hello World String10 : NO : A1B2,B3
11 : Hello World String11 : YES : A11B2,B3,B14,B25

A1B2,B3A11B2,B3的字符形式只有一个字母A和一个或两个数字2314,{ {1}}等然后与仅一封信25以及一个或两个数字连接,例如B2314。等

现在出来了

25

如何保留1 Hello World String10 NO A1B2,B3 11 Hello World String11 YES A11B2,B3,B14,B25 中的最后一个数组成员并进行连接和输出。

@values

感谢您的评论和回复。

[更新]

我的出局需要遵循规则的连接。

1 Hello World String1 NO A1B2,A1B3 11 Hello World String11 YES A11B2,A11B3,A11B14,A11B25 和一两个号码,由AB分隔的一两个号码加入

2 个答案:

答案 0 :(得分:2)

你可以这样做:

my @values = split(':', $line);
my $a = $values[-1];
$a =~ s/.*(A\d+).*/$1/s;
$values[-1] =~ s/(?<=,)/$a/g;

See it

答案 1 :(得分:1)

目前还不完全清楚你所问的内容即使在稍微不同的情况下也适用,但这是我的尝试。在打印@values之前,请执行

$values[-1] =~ s/(?<=,)/ substr($values[-1],0,3) /ge;