Perl以最有效的方式在重复模式上分割字符串?

时间:2012-01-25 21:25:36

标签: perl split design-patterns repeat

我想分割一个具有特定重复模式的字符串,例如:

$string = "GGGGG-SOMETHING-ELSE-GGG-LAST";

@array=(-SOMETHING-ELSE-,-LAST);

我对perl新手的尝试

split(/G{2,}/,$string);

不幸的是,这导致只有GG模式被分割 - 而不是我希望产生2个数组元素的贪婪的GGGGG或GGG模式。

2 个答案:

答案 0 :(得分:5)

不,这似乎(大部分)按预期工作。以下代码:

use strict;
use warnings;

$_="GGGGG-SOMETHING-ELSE-GGG-LAST";
my @a=split(/G{2,}/,$_);
print join(",",@a) . "\n";

产生输出:

,-SOMETHING-ELSE-,-LAST

问题是第一个元素是空字符串。因此,要解决这个问题,您可以执行以下操作:

use strict;
use warnings;

$_="GGGGG-SOMETHING-ELSE-GGG-LAST";
my @a=grep{$_ ne ""}(split(/G{2,}/,$_));
print join(",",@a) . "\n";

这就产生了你想要的东西:

-SOMETHING-ELSE-,-LAST

答案 1 :(得分:0)

我刚刚在我的机器上检查了你的代码并且工作正常:

$string = "GGGGG-SOMETHING-ELSE-GGG-LAST";
print join(':', split(/G{2,}/,$string));

返回:

:-SOMETHING-ELSE-:-LAST

我正在使用的perl版本是:v5.10.1

是否可以添加一些关于如何运行它的信息?