2012-01-25 10 views
4

私は例えば、特定の繰り返しパターンを持っている文字列を分割したいと思います。perl初心者Perlは最も効果的な方法で繰り返しパターンに文字列を分割しますか?

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

限り

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

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

私の試み

へ残念なことに、この結果、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マシンに切り替えました.1ライナーと私のテクニックはうまくいきました。私はこれがPerlの私のバージョンの人工物だと思う。 – oiiio

+3

単に 'grep $ _、split/G {2、} /'はうまくいきます。ヌル文字列がfalseであるため、各要素の比較を行う必要はありません。 – Borodin

0

私はちょうど私のマシンでコードをチェックし、それが正常に動作します:

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

リターン:

:-SOMETHING-ELSE-:-LAST 

T彼が使用しているperlのバージョンは次のとおりです:v5.10.1

あなたはどのように実行しているかについていくつかの情報を追加できますか?

関連する問題