请考虑以下字符串:
/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
将包含该正则表达式?有什么办法可以缩短它?
答案 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;
}