我想拆分有一定的重複圖案的字符串,例如:到目前爲止Perl以最有效的方式在重複模式中分割字符串?
$string = "GGGGG-SOMETHING-ELSE-GGG-LAST";
到
@array=(-SOMETHING-ELSE-,-LAST);
我嘗試作爲一個Perl新手
split(/G{2,}/,$string);
不幸的是,這隻會導致GG分裂的模式 - 而不是我期望得到的貪婪的GGGGG或GGG模式導致2個數組元素。
我想拆分有一定的重複圖案的字符串,例如:到目前爲止Perl以最有效的方式在重複模式中分割字符串?
$string = "GGGGG-SOMETHING-ELSE-GGG-LAST";
到
@array=(-SOMETHING-ELSE-,-LAST);
我嘗試作爲一個Perl新手
split(/G{2,}/,$string);
不幸的是,這隻會導致GG分裂的模式 - 而不是我期望得到的貪婪的GGGGG或GGG模式導致2個數組元素。
不,這似乎(大部分)按預期工作。下面的代碼:
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
我只是檢查你的代碼在我的機器上工作得很好:
$string = "GGGGG-SOMETHING-ELSE-GGG-LAST";
print join(':', split(/G{2,}/,$string));
回報:
:-SOMETHING-ELSE-:-LAST
ŧ他使用的perl版本是:v5.10.1
您可以添加一些關於如何運行它的更多信息嗎?
我將電腦切換到Ubuntu 11機器,您的單線以及我的技術工作正常。我認爲這是我的Perl版本的一個神器。 – oiiio
只需'grep $ _,split/G {2,} /'可以正常工作。由於空字符串爲假,因此無需對每個元素進行比較。 – Borodin