2012-01-25 39 views
4

我想拆分有一定的重複圖案的字符串,例如:到目前爲止Perl以最有效的方式在重複模式中分割字符串?

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

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

我嘗試作爲一個Perl新手

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

不幸的是,這隻會導致GG分裂的模式 - 而不是我期望得到的貪婪的GGGGG或GGG模式導致2個數組元素。

回答

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 
+0

我將電腦切換到Ubuntu 11機器,您的單線以及我的技術工作正常。我認爲這是我的Perl版本的一個神器。 – oiiio

+3

只需'grep $ _,split/G {2,} /'可以正常工作。由於空字符串爲假,因此無需對每個元素進行比較。 – Borodin

0

我只是檢查你的代碼在我的機器上工作得很好:

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

回報:

:-SOMETHING-ELSE-:-LAST 

ŧ他使用的perl版本是:v5.10.1

您可以添加一些關於如何運行它的更多信息嗎?