2013-06-05 108 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

最后一个选项应该工作匹配1个或多个空格,并且裂过,所以我的猜测是,你有可能有一些标签。 – squiguy

+0

你从你的尝试中得到了什么输出?你使用的最后一种方法应该是有效的。 – doubleDown

+0

@squiguy:'\ s'匹配标签。问题是,如果字符串以分隔符开始,Perl将返回一个带有零长度前导字段的列表。 – Borodin

回答

21

如果split的第一个参数是字符串''(空格),那么它是特殊的。它应该匹配任何尺寸的空白:

my @array1 = split ' ', $VAR1; 

(顺便说一句,这几乎相当于你最后的选择,但同时也删除任何前导空格。)

+1

+1不错..不知道这个。 –

+0

这似乎是工作! 谢谢 – hallert

9

刚刚尝试使用:

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

Codepad Demo

Perldoc

作为另一种特殊情况,split可以模拟缺省PATTERN时 命令行工具awk的默认行为,或者模拟由单个空格字符组成的字符串 (例如“'或”\ x20“, 但没有例如/ /)。在这种情况下,在EXPR任何前导空格是 去除分裂发生

+0

这也是工作 – hallert

4

\s+他们

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

作品以及。也许我的测试结果在我测试的时候有所不同,所以它把我扔掉了。似乎所有的答案在这里工作。 – hallert