首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要Perl regex,它匹配从3.10.1.0开始的每个软件版本和所有进一步的版本编号

需要Perl regex,它匹配从3.10.1.0开始的每个软件版本和所有进一步的版本编号
EN

Stack Overflow用户
提问于 2019-08-12 12:39:39
回答 2查看 110关注 0票数 6

这是我的测试用例。

直到3.10.0.0版本才开始工作的cmd_1在以后的版本中无法工作。Cmd_2是在3.10.1.0中引入的,它将是未来的有效替代。

我需要为上面的场景添加一个条件。对于3.10.1.0之前的旧版本,cmd_1必须执行,对于3.10.1.0及更高版本,cmd_2必须执行。

我尝试了如下:

代码语言:javascript
复制
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.03.10.2.03.11.0.03.11.2.03.20.0.04.0.0.05.0.0.010.0.0.0

Cmd_1必须在以下版本中执行:

3.10.0.03.9.0.03.1.0.03.0.0.02.0.0.01.0.0.0

我又试了几次雷克斯,但没能找到一个完美的。请帮我处理这个。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-12 14:07:37

不要对此使用正则表达式。

代码语言:javascript
复制
use version qw( );

if ($version >= version->declare("3.10.1.0")) {
   ...
} else {
   ...
}
票数 11
EN

Stack Overflow用户

发布于 2019-08-12 12:50:38

这个裁判应该做你想做的事。

代码语言:javascript
复制
^(?:[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应该运行的所有情况,即

代码语言:javascript
复制
[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

基于regex101的演示

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57461407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档