将值放入变量perl中

时间:2014-02-09 10:35:37

标签: regex perl

我有一个像这样的字符串

destination: 29231, 280646, 9.715e-2, 60, 109

我试图将每个数字放入变量

if ($i =~ m/^destination:\s(\d+)\,\s(\d+)\,\s(\d+\.\d+\e-\d+)\,\s(\d+)\,\s(\d+)/){
$num1 = $1;
$num2 = $2;
$num3 = $3;
$num4 = $4;
$num5 = $5;
}

似乎\s(\d+\.\d+\e-\d+)\无效,我在哪里做错了?

3 个答案:

答案 0 :(得分:2)

更好的方法是使用split函数。在这里,您可以将字符串拆分为由空格(\s+)分隔的元素,如果它们是数字(/^\d+/),则将它们打印出来(或重命名它们或其他)。

use strict;
use warnings;

my $string = 'destination: 29231, 280646, 9.715e-2, 60, 109';

my @split = split(/\s+/, $string);

foreach (@split){
    s/,//; # get rid of commas
    print "$_\n" if /^\d+/;
}

打印:

29231
280646
9.715e-2
60
109

答案 1 :(得分:2)

解决方案取决于您的字符串的确切格式,但您可以找到所有不是空格或逗号的字段并删除第一个字段,如下所示

use strict;
use warnings;

my $string = 'destination: 29231, 280646, 9.715e-2, 60, 109';

my @numbers = $string =~ /[^\s,]+/g;
shift @numbers;

print "$_\n" for @numbers;

<强>输出

29231
280646
9.715e-2
60
109

答案 2 :(得分:-2)

发现它,只是在\ e上犯了错误,

正确的表达应该是:\s(\d+\.\d+\w-\d+)\