需要 Perl 正则表达式匹配从 3.10.1.0 开始的每个软件版本以及所有后续版本编号
Need Perl regex which matches every a software version starting from 3.10.1.0 and all further versions numbering
这是我的测试用例。
A cmd_1,在版本 3.10.0.0 之前一直有效,在以后的版本中将无效。 Cmd_2 在 3.10.1.0 中引入,将成为未来的有效替代品。
我需要为上面的场景添加一个条件。对于 3.10.1.0 之前的旧版本,必须执行 cmd_1,对于 3.10.1.0 及更高版本,必须执行 cmd_2。
我试过如下:
if ( ( $version =~ /^3\.10\.[1-9]/ ) || ( $version =~ /^3\.[1-9][0-9]/ ) || ( $version =~ /^[4-9]/ ) {
# execute cmd_2;
}else{
# execute cmd_1;
}
上述正则表达式在少数情况下会失败。比如在version=3.10.0.0的情况下,会执行cmd_2,无效。
Cmd_2 必须在以下版本中执行:
3.10.1.0
、3.10.2.0
、3.11.0.0
、3.11.2.0
、3.20.0.0
、4.0.0.0
、5.0.0.0
、10.0.0.0
Cmd_1 必须在以下版本中执行:
3.10.0.0
、3.9.0.0
、3.1.0.0
、3.0.0.0
、2.0.0.0
、1.0.0.0
我尝试了更多的正则表达式,但没能找到一个完美的正则表达式。请帮我解决这个问题。
提前致谢。
这个正则表达式应该做你想做的。
^(?:[4-9]|[1-9]\d+)(?:\.\d+){3}|3\.[2-9]\d(?:\.\d+){2}|3\.1[1-9](?:\.\d+){2}|3\.10\.[1-9]\d?\.\d+$
它会查找 cmd_2
应该 运行 的所有情况,即
[1-9]x.x.x.x
[4-9].x.x.x
3.[2-9]x.x.x
3.1[1-9].x.x
3.10.[1-9]x.x
3.10.[1-9].x
不要为此使用正则表达式模式。
use version qw( );
if ($version >= version->declare("3.10.1.0")) {
...
} else {
...
}
这是我的测试用例。
A cmd_1,在版本 3.10.0.0 之前一直有效,在以后的版本中将无效。 Cmd_2 在 3.10.1.0 中引入,将成为未来的有效替代品。
我需要为上面的场景添加一个条件。对于 3.10.1.0 之前的旧版本,必须执行 cmd_1,对于 3.10.1.0 及更高版本,必须执行 cmd_2。
我试过如下:
if ( ( $version =~ /^3\.10\.[1-9]/ ) || ( $version =~ /^3\.[1-9][0-9]/ ) || ( $version =~ /^[4-9]/ ) {
# execute cmd_2;
}else{
# execute cmd_1;
}
上述正则表达式在少数情况下会失败。比如在version=3.10.0.0的情况下,会执行cmd_2,无效。
Cmd_2 必须在以下版本中执行:
3.10.1.0
、3.10.2.0
、3.11.0.0
、3.11.2.0
、3.20.0.0
、4.0.0.0
、5.0.0.0
、10.0.0.0
Cmd_1 必须在以下版本中执行:
3.10.0.0
、3.9.0.0
、3.1.0.0
、3.0.0.0
、2.0.0.0
、1.0.0.0
我尝试了更多的正则表达式,但没能找到一个完美的正则表达式。请帮我解决这个问题。
提前致谢。
这个正则表达式应该做你想做的。
^(?:[4-9]|[1-9]\d+)(?:\.\d+){3}|3\.[2-9]\d(?:\.\d+){2}|3\.1[1-9](?:\.\d+){2}|3\.10\.[1-9]\d?\.\d+$
它会查找 cmd_2
应该 运行 的所有情况,即
[1-9]x.x.x.x
[4-9].x.x.x
3.[2-9]x.x.x
3.1[1-9].x.x
3.10.[1-9]x.x
3.10.[1-9].x
不要为此使用正则表达式模式。
use version qw( );
if ($version >= version->declare("3.10.1.0")) {
...
} else {
...
}