版本号的正则表达式

9

我希望能得到这样的匹配结果:

3.1.0
10.5.1
0.5

这可能代表构建版本编号系统。

非匹配项:

3.1.

I tried this regex:

[0-9]+\.[0-9]+

这只会得到0.5而不是10.5.1

8个回答

28

这个怎么样:

\d+(?:\.\d+)+

1
这正是我想要的,你之前的 \d+(?:\.\d+){1,2} 很好,可以将其作为 \d+(?:\.\d+){1,100} 作为可接受的方法。 - Ken D
你的代码遇到了和我的一样的问题(即匹配了 10.5.):http://regexhero.net/tester/?id=f9dc4e62-06db-4a53-a60a-e3291cf33c29 - Mrchief
@Mrchief:不,你的旧代码(带有*)也匹配了尾随的.。而我的代码则没有。 - zerkms
@zerkms所说的是正确的。它不匹配10.5.和类似的内容。 - Ken D

3
这个怎么样?
^\d{1,3}\.\d{1,3}(?:\.\d{1,6})?$

这将匹配主次版本号和可选修订版本号。主版本号和次版本号可以是1-3位数字(0-999),修订版本号可以是6位数字。

有效的版本号格式: 1.1 1.2.3 1.2.123456

无效的版本号格式: 1 1.2. 1.2.1234567 1.2.* 任何包含字母字符的内容


0
(\d+\.){1,3}\d+

匹配以下内容
Express Edition(64位)RTM 15.0.4223.1

15.0.4223.1
15.0.4
15.0

并且 不匹配 以下内容

15
15.

0
我推荐这个:
^\d+(?:\.\d+){2}$

{2} 确保不匹配如 10.5 版本。

^ 和 $ 将“保护”版本的开头和结尾,防止出现以下情况:

A10.5.1
10.5.
10.5.1A

0

试试这个:

[0-9]+\.[0-9]+(?:\.[0-9]+)?

  1. (?: 的意思是
  2. 这会匹配甚至不正确的 10.5.
- zerkms
好的,它可以匹配三位数,但是我们不能保证即使是这样格式为(数字。数字...等)的任意数量的数字/浮点数/数字也能匹配“1.2.3.4.5.6”吗? - Ken D
@zerkms:这个匹配只会包含10.5,但是我明白你的观点。 - Mrchief

0

我认为这样会更有意义:

^(?:0|[1-9][0-9]*)(?:\.(0|[1-9][0-9]*))*$

如果数字组件超过1位数,每个数字组件都必须以非零数字开头。


很遗憾,它可能是010.5.3,所以它并不是一个完整的版本系统,但非常类似。 - Ken D
@LordCover 没关系。我会投票给zerkms的答案。;) - shinkou

0
这可能是一个老话题,但我发现了相同的问题,并找到了一个更简单的解决方案,所以这可能会帮助那些正在寻找答案的人。 这个(\[0-9\]+\[\.\]?)+将匹配这些内容:
7.1.1
12.1.1.3.12.442.5463.343.44.5
9
11.1.1
11.1.1

此外,如果有人只想获取数字(或者想按点分割),可以使用以下方法:
[0-9]+[\.]?? 

regexhero

(Programming相关)

0

虽然没有彻底测试,但就是这样了,伙计们 :-)

(?<major>\d+)(?<minor>:\.\d+)?(?<build>:\.\d+)?(?<revision>:\.\d+)?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接