我有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.
在此先感谢您的帮助!
嗯,最简单的方法就是完全删除所有数字:
sub remove_numbers {
my ($orig) = @_;
$orig =~ s/\d+//g;
return $orig;
}
Run Code Online (Sandbox Code Playgroud)
但它有点幼稚:例如,some-package-1.4.1并some-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)
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |