我有一个以版本号结尾的字符串,可能有两个或三个版本部分。
SOMEPREFIX10.1.1
或
SOMEPREFIX11.2
我想以通用的方式删除版本号的前缀。
我可以做这样的事情
$result =~ s/SOMEPREFIX//
这样可行,但如果SOMEPREFIX
更改我需要修改正则表达式模式。
如何删除除版本号以外的所有内容(我猜(\d+\.(\d.)?\d)
?)
答案 0 :(得分:0)
你的问题非常不精确,但听起来你只需要捕捉字符串末尾的所有小数位和点
if ( my ($version) = /([\d.]+)$/ ) {
# use $version
}
答案 1 :(得分:0)
假设您的字符串仅以字母开头并以版本号结尾,则以下脚本适合您。
以下脚本适用于以下字符串
SOMEPREFIX10.1.1
SOMEPREFIXajdgcjhadjh134.1.1
SOMEPREFIX11.2
SOMEPREFIXajdgcjhadjh134.1.1.657.34.5
脚本:
#!/usr/bin/perl
my @reg=qw(SOMEPREFIX10.1.1 SOMEPREFIXajdgcjhadjh134.1.1 SOMEPREFIX11.2 SOMEPREFIXajdgcjhadjh134.1.1.657.34.5);
foreach (@reg)
{
$_=~ /([a-zA-Z]+)(.*)/;
print "$2\n";
}
输出:
10.1.1
134.1.1
11.2
134.1.1.657.34.5
答案 2 :(得分:0)
您想在字符串的末尾匹配两个或三个八位位组数字,如果得到它们,请删除字符串中的所有其他内容?
对。
s/.*?(\d+(?:\.\d+){1,2})$/$1/
我知道您知道何时以及如何使用=~
运算符。
答案 3 :(得分:-1)
如果SOMEPREFIX包含一些数字,你可以匹配,直到数字和点的第一个组合没有匹配,你可以使用正向前瞻:
my $result = 'SOME3PREFIX11.1.0';
$result =~ s/^.*?(?=(\d+\.))//;
print $result;
__DATA__
11.1.0