使用正则表达式解释perl中的权限

时间:2014-01-13 17:58:55

标签: regex perl math eval

我正在尝试读取由:分隔的两个数字并执行比较。

以下是一些说明我的问题的代码:

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)将其评估为数字?

2 个答案:

答案 0 :(得分:5)

来自perldata

/^(?:[+-]?)(?=\d|\.\d)\d*(?:\.\d*)?(?:[Ee](?:[+-]?\d+))?$/

或者,

use Regexp::Common;
/$RE{num}{real}/

(这些假设您需要Perl对数字的定义。)

答案 1 :(得分:3)

我会在这里使用split函数(split /:/)。