我正在尝试读取由:
分隔的两个数字并执行比较。
以下是一些说明我的问题的代码:
use strict;
use warnings;
my @nums = qw(1.23:2.13 0.1:2.11 1.17772e+06:1.32 2:10.2);
for my $number (@nums){
print "actual numbers $number\n";
my ($c, $e) = ($1, $2) if $number =~ /(\d+\.\d+|\d+):(\d+\.\d+|\d+)/;
print "regex matches: $c:$e\n";
}
哪个输出:
actual numbers 1.23:2.13
regex matches: 1.23:2.13
actual numbers 0.1:2.11
regex matches: 0.1:2.11
actual numbers 1.17772e+06:1.32
regex matches: 06:1.32 # not capturing 1.17772e+06
actual numbers 2:10.2
regex matches: 2:10.2
我的问题是:我怎样才能a)捕获1.17772e+06
和b)将其评估为数字?
答案 0 :(得分:5)
来自perldata:
/^(?:[+-]?)(?=\d|\.\d)\d*(?:\.\d*)?(?:[Ee](?:[+-]?\d+))?$/
或者,
use Regexp::Common;
/$RE{num}{real}/
(这些假设您需要Perl对数字的定义。)
答案 1 :(得分:3)
我会在这里使用split函数(split /:/
)。