这是我的测试用例。
直到3.10.0.0版本才开始工作的cmd_1在以后的版本中无法工作。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
我又试了几次雷克斯,但没能找到一个完美的。请帮我处理这个。
提前谢谢。
发布于 2019-08-12 14:07:37
不要对此使用正则表达式。
use version qw( );
if ($version >= version->declare("3.10.1.0")) {
...
} else {
...
}发布于 2019-08-12 12:50:38
这个裁判应该做你想做的事。
^(?:[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].xhttps://stackoverflow.com/questions/57461407
复制相似问题