Perl比较没有数字的字符串

Cri*_*ian 1 perl

我有2个变量:

my $var1 = 'package-name-1.4';
my $var2 = 'package-name-1.5';
Run Code Online (Sandbox Code Playgroud)

我想要做的是将$ var1与$ var2进行比较,同时排除数字.

我已经在网上看过并试过Regex,但是我无法让它工作,我非常感谢一些帮助.

我的想法如下:

if (removeNumbers($var1) =~ removeNumbers($var2))
Run Code Online (Sandbox Code Playgroud)

因此,结果就像比较:package-name-和package-name-,从而评估为true.

在此先感谢您的帮助!

rai*_*7ow 5

嗯,最简单的方法就是完全删除所有数字:

sub remove_numbers {
  my ($orig) = @_;
  $orig =~ s/\d+//g;
  return $orig;
}
Run Code Online (Sandbox Code Playgroud)

但它有点幼稚:例如,some-package-1.4.1some-package-1.4不会平等.最好也删除点,但只有当它们跟随数字(用作分隔符)时.

  $orig =~ s/\d+[.]?//g;
Run Code Online (Sandbox Code Playgroud)

甚至更多,也许在数字之前的第一个连字符也应该去(所以'package-name'和'package-name-1'(甚至'package-name-1.0-some-fancy-line'和'package-name) -ome-fancy-line')将被视为相同:

  $orig =~ s/-?\d+[.]?//g;  
Run Code Online (Sandbox Code Playgroud)

更新:然而,有不止一种方法可以做到:

  $orig = substr $orig, 0, rindex $orig, '-';
Run Code Online (Sandbox Code Playgroud)

如果所有字符串具有相同的格式(版本号总是在字符串的末尾,始终跟随最后一个连字符,它总是在那里),它是适用的:

使用如下:

if (remove_numbers($var1) eq remove_numbers($var2))
Run Code Online (Sandbox Code Playgroud)