Perl Regular Expression默认为非匹配

时间:2011-07-02 17:44:36

标签: regex perl

让我说我这样做:

my ($a,$b,$let) = $version =~ m/^(\d+)\.(\d+)\.?([A-Za-z])?$/;

所以这将匹配例如:1.3a,1.3,... 如果let不可用,我想要$ let的默认值,比方说,默认为0。 所以1.3我会得到: $ a = 1 $ b = 3 $ let = 0

有可能吗? (来自正则表达式,不使用其他语句)

谢谢,

2 个答案:

答案 0 :(得分:2)

这将有效 - 更新为使用按位或代替三元运算符。

my ($a,$b,$let) = ($version =~ m/^(\d+)\.(\d+)\.?([A-Za-z])?$/) 
            && ($1,$2,$3 || 0 );

这是一个测试脚本

&t("1.3");
&t("1.3a");
&t("1.3.a");

sub t {
$version = shift;
my ($a,$b,$let) = ($version =~ m/^(\d+)\.(\d+)\.?([A-Za-z])?$/) 
                && ($1,$2,$3 || 0 );
print "\n result $a.$b.$let";
}

输出

result 1.3.0
result 1.3.a
result 1.3.a

使用三元运算符的原始解决方案也可以使用

my ($a,$b,$let) = ($version =~ m/^(\d+)\.(\d+)\.?([A-Za-z])?$/) 
            && (defined $3 ? ($1,$2,$3) : ($1,$2,0));

答案 1 :(得分:0)

$let的默认值应为undef。如果需要,您可以对此进行测试。