如果我有
my $ip = "10.9.8.X";
我希望$ IPCore有“10.9.8”。有一种简单的方法可以在一行中完成这项工作吗?
我通常这样做
my $ip = "10.9.8.X";
my $IPCore = $ip;
$IPCore =~ s/([0-9]{3}\.[0-9]{3}\.[0-9]{3})\.[xX]{1,3}$/$1/
##$IPCore is now 10.9.8
有更简单的方法吗?
谢谢
答案 0 :(得分:2)
删除最后.
及其后的所有内容的简短解决方案:
( my $IPCore = $ip ) =~ s/\.[^.]*\z//;
my $IPCore = $ip =~ s/\.[^.]*\z//r; # 5.14+
优化解决方案,删除第三个.
及其后的所有内容:
( my $IPCore = $ip ) =~ s/^[^.]*+(?:\.[^.]*+){2}\K.*//s; # 5.10+
my $IPCore = $ip =~ s/^[^.]*+(?:\.[^.]*+){2}\K.*//sr; # 5.14+
答案 1 :(得分:0)
假设您相信IP将以合理的格式出现,一个非常简单的方法就是从上一个.
(点)切断最后一个段,如下所示:
my $ip = '10.9.8.x';
(my $ipCore = $ip) =~ s/(.*?)\.[^.]+$/$1/;
print $ipCore;
//yields '10.9.8'
答案 2 :(得分:0)
my ($ip, $IPCore) = ("10.9.8.X");
print $IPCore if $ip =~ /([0-9]{1,3}(?:\.[0-9]{1,3}){2})\.[xX]{1,3}$(?{$IPCore=$^N})/;
出10.9.8