Вот немного другая версия (хотя нет большой разницы с предложением M42):
my $aad='perl-Class-Std-Utils-0.0.3-1.el4.rf';
if ($aad =~ m/^([\w-]+)-([\d.-]+)\.([\w.]+)$/) {
print "$1 = $2 = $3\n";
}
Какие отпечатки
perl-Class-Std-Utils = 0.0.3-1 = el4.rf
У вас было +
в вашем первом классе персонажей; Я подозревал, что это могло быть квантификатором, а не символом «+». Следовательно, я удалил его, так как вы не можете использовать квантификаторы в классах персонажей, но, конечно, я, возможно, неправильно понял ваши намерения.
Кроме того, я избавился от бита (.*)
- лучше быть настолько конкретным, насколько это возможно, если вы знаете, что именно вы хотите сопоставить.