gpt4 book ai didi

regex - 用于版本号解析的正则表达式

转载 作者:行者123 更新时间:2023-12-02 14:43:13 26 4
gpt4 key购买 nike

我有以下形式的版本号:

版本.发布.修改

其中版本、发行版和修改是一组数字或“*”通配符。此外,任何这些数字(以及任何前面的 .)都可能丢失。

因此以下内容是有效的并解析为:

1.23.456 = version 1, release 23, modification 456
1.23 = version 1, release 23, any modification
1.23.* = version 1, release 23, any modification
1.* = version 1, any release, any modification
1 = version 1, any release, any modification
* = any version, any release, any modification

但这些无效:

*.12
*123.1
12*
12.*.34

任何人都可以为我提供一个不太复杂的正则表达式来验证和检索发布、版本和修改号吗?

最佳答案

我将格式表示为:

"1-3 dot-separated components, each numeric except that the last one may be *"

作为正则表达式,那就是:

^(\d+\.)?(\d+\.)?(\*|\d+)$

[编辑添加:此解决方案是一种简洁的验证方法,但有人指出提取值需要额外的工作。是通过使正则表达式复杂化还是通过处理匹配组来处理这个问题,这只是一个品味问题。

在我的解决方案中,组捕获 "." 字符。这可以使用非捕获组来解决,如 ajborley 的答案所示。

此外,最右边的组将捕获最后一个组件,即使组件少于三个,因此,例如,两个组件的输入会导致第一个和最后一个组捕获,而中间一个未定义。我认为这可以由支持的非贪婪团体来处理。

在正则表达式之后处理这两个问题的 Perl 代码可能如下所示:

@version = ();
@groups = ($1, $2, $3);
foreach (@groups) {
next if !defined;
s/\.//;
push @version, $_;
}
($major, $minor, $mod) = (@version, "*", "*");

这实际上并不比 "."上的拆分短。]

关于regex - 用于版本号解析的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/82064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com