使用正则表达式从路径列表中提取版本号

时间:2018-12-12 16:56:25

标签: regex perl

请考虑以下字符串:

/bin/python2.7.5
/bin/python/2.7.5/log/dir
/bin/python2.7.5/src

我想将版本提取到一个变量中,所以对于第二个字符串,我做了:

if ($str =~ /(.*)\/python\/(.*?)\//) {
    my $version = $2;
}

对于第一个,我可以执行以下正则表达式:

$str =~ /(.*)\/python(\d+\.)?(\d+\.)?(\*|\d+)/;

但是如何将这些正则表达式合并为一个主正则表达式,以便$2将包含该正则表达式?有什么办法可以缩短它?

2 个答案:

答案 0 :(得分:1)

您可以使用

if ($str =~ /(.*)\/python\/?([^\/]*)/) {
    my $version = $2;
}

请参见regex demo

详细信息

  • (.*)-组1:尽可能多的除换行符以外的0+个字符
  • \/python-/python子字符串
  • \/?-1或0 /个字符
  • ([^\/]*)-第2组:/字符以外的任何0+字符。

答案 1 :(得分:1)

对于所有提供的示例,您可以使用([\d.]+),即:

if ($str =~ /([\d.]+)/) {
    my $version = $1;
}

Perl Demo
Regex Demo


正则表达式说明
enter image description here