REGEX不适用于RPM

时间:2011-01-17 13:07:07

标签: perl

perl-Class-Std-Utils-0.0.3-1.el4.rf

如何提取值:perl-Class-Std-Utils和0.0.3-1

$aad='perl-Class-Std-Utils-0.0.3-1.el4.rf';

if ( $aad =~ /(^[\w+-]-(\d*)\.(.*))/{
    print " $1 = $2 = $3 " ;
}

它不起作用

2 个答案:

答案 0 :(得分:1)

这是一个略有不同的版本(虽然与M42的建议没什么大不同):

my $aad='perl-Class-Std-Utils-0.0.3-1.el4.rf';

if ($aad =~ m/^([\w-]+)-([\d.-]+)\.([\w.]+)$/) {
   print "$1 = $2 = $3\n";
}

打印

perl-Class-Std-Utils = 0.0.3-1 = el4.rf

你的第一个角色类里面有一个+;我怀疑它可能是一个量词,而不是'+'字符。因此,我删除了它,因为你不能在字符类中使用量词,但是,当然,我可能完全误读了你的意图。

此外,我摆脱了(.*)位 - 如果你知道你想要匹配的话,最好尽可能具体。

答案 1 :(得分:0)

尝试使用:

my $aad='perl-Class-Std-Utils-0.0.3-1.el4.rf';

if ( $aad =~ /^([\w+-]+)-([\d.-]+)\.(.*)/) {
    print " $1 = $2 = $3 " ;
}

<强>输出:

perl-Class-Std-Utils = 0.0.3-1 = el4.rf