18

我正在尝试将字符串拆分为一个数组,拆分发生在空格处。每个文本块由许多(可变)空格分隔。

这是字符串:

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

拆分这个的最好方法是什么?

4

3 回答 3

36

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

my @array1 = split ' ', $VAR1;

(顺便说一句,它几乎等同于您的最后一个选项,但它也会删除任何前导空格。)

于 2013-06-05T17:28:12.340 回答
11

只需尝试使用:

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

键盘演示

Perldoc

作为另一种特殊情况,当省略 PATTERN 或由单个空格字符组成的文字字符串(例如 ' ' 或 "\x20" ,但不是例如 // )时, split 模拟命令行工具 awk 的默认行为。在这种情况下,EXPR 中的任何前导空格都会在拆分发生之前被删除

于 2013-06-05T17:29:20.777 回答
8

\s+匹配 1 个或多个空格,并在它们上拆分

my @array1 = split /\s+/, $VAR1;
于 2013-06-05T17:30:44.033 回答