Чего-то не могу сообразить как бы кратко и с помощью регулярных выражений сделать следующее:
Удалить из последовательности произвольной длины из точек и цифр последнюю точку и цифру. Если число одно - то вернуть пустую строку. Если не соответствует этому шаблону, то тоже пустую строку. Например,
1.2.3.115.95 - вернуть 1.2.3.115
27.4 - вернуть 27
6 - вернуть пустую строку ""
6.abcd.7.4 - вернуть пустую строку ""
Возникло на днях на практике. Долго думать было некогда и поскольку реально могли быть только варианты максимум с 4 цифрами просто ляпнул следующее:
sub parentcode
{
my $s=$_[0];
return $1 if ($s=~m/(\d+\.\d+\.\d+)\.\d+/g);
return $1 if ($s=~m/(\d+\.\d+)\.\d+/g);
return $1 if ($s=~m/(\d+)\.\d+/g);
return "";
}
Но как-то оно говнокодисто выглядит. И не универсально. Между тем, что-то изящного универсального способа не могу придумать. Все какое-то нагромождение с циклами и поиском подстрок выходит.
Может можно в одну строчку и регуляркой?
Update: в коментах нашлись варианты