2013-06-05 9 views
8

文字列を空白で発生した分割で配列に分割しようとしています。テキストの各ブロックは、多数の(可変の)スペースで区切られています。私は成功せず、次の試してみました空白で変数を分割

NUM8   host01 1,099,849,993 1,099,849,992    1 

:ここ

は文字列です。

my @array1 = split//, $VAR1; 

my @array1 = split/+/, $VAR1; 

my @array1 = split /\s/, $VAR1; 

my @array1 = split /\s+/, $VAR1; 

私はで終わるしたいと思います:

$array1[0] = NUM8 
$array1[1] = host01 
$array1[2] = 1,099,849,993 
$array1[3] = 1,099,849,992 
$array1[4] = 1 

これを分割するための最良の方法は何ですか?

ありがとうございます!

+1

最後のオプションは動作するはずですので、私の推測では、あなたが持っていますおそらくいくつかのタブ。 – squiguy

+0

あなたの試みからどのような成果を得ましたか?最後に使用したメソッドは動作するはずです。 – doubleDown

+0

@squiguy: '\ s'はタブと一致します。問題は、文字列がセパレータで始まる場合、Perlは長さが先頭のフィールドがあるリストを返します。 – Borodin

答えて

21

splitの最初の引数が文字列 ''(スペース)の場合、それは特別です。これは、任意のサイズの空白と一致する必要があります:

my @array1 = split ' ', $VAR1; 

は(ところで、それはあなたの最後のオプションとほぼ同等であるが、それはまた、任意の先頭の空白を削除します。)

+1

+1いいです..これは分かりませんでした。 –

+0

これは動作しているようです! ありがとう – hallert

9

を単に使用してみてください:

my @array1 = split(' ',$VAR1); 
Perldocから

Codepad Demo

別の特別なケースとして、splitは、PATTERNが省略された場合、または の文字列(たとえば、 "'または" \ x20 "、 などのリテラル )のデフォルト動作をエミュレートします。例えない/ /)。この場合、EXPRのいずれかの先頭の空白が 分割する前に除去され、それらに

+0

これも動作しています – hallert

4

\s+マッチ1つの以上の空白、および分割を発生

my @array1 = split /\s+/, $VAR1; 
+0

同様に動作します。私がテストしている間、私の出力は多分多分、それは私を捨てました。ここでのすべての答えが働いているようです。 – hallert

関連する問題