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

oii*_*iio 4 perl split design-patterns repeat

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

$string = "GGGGG-SOMETHING-ELSE-GGG-LAST";
Run Code Online (Sandbox Code Playgroud)

@array=(-SOMETHING-ELSE-,-LAST);
Run Code Online (Sandbox Code Playgroud)

我的尝试到目前为止是一个perl新手

split(/G{2,}/,$string);
Run Code Online (Sandbox Code Playgroud)

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

小智 5

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

use strict;
use warnings;

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

产生输出:

,-SOMETHING-ELSE-,-LAST
Run Code Online (Sandbox Code Playgroud)

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

use strict;
use warnings;

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

这会产生你想要的东西:

-SOMETHING-ELSE-,-LAST
Run Code Online (Sandbox Code Playgroud)

  • 简单地说`grep $ _,split/G {2,} /`工作正常.无需对每个元素进行比较,因为空字符串为false. (3认同)