【问题标题】:Regular expression for version numbers版本号的正则表达式
【发布时间】:2011-07-08 01:02:23
【问题描述】:

我想得到这样的匹配:

3.1.0
10.5.1
0.5

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

不匹配:

3.1.

我试过这个正则表达式:

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

这只会得到0.5,而不是10.5.1

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    这个呢:

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

    【讨论】:

    • 这正是我想要的,而你的旧\d+(?:\.\d+){1,2} 很好,可以作为一种可接受的方法输入\d+(?:\.\d+){1,100}
    • 你的遭遇和我一样的陷阱(即匹配10.5.):regexhero.net/tester/?id=f9dc4e62-06db-4a53-a60a-e3291cf33c29
    • @Mrchief:不,您的旧(带有*)也匹配了尾随.。虽然我的没有
    • @zerkms 说的是对的。它与10.5. 等不匹配。
    【解决方案2】:

    这个怎么样?

    ^\d{1,3}\.\d{1,3}(?:\.\d{1,6})?$
    

    这将匹配 Major.Minor 和可选修订。 Major 和 Minor 可以是 1-3 位(0-999),Revision 可以是 6 位。

    有效: 1.1 1.2.3 1.2.123456

    无效: 1 1.2. 1.2.1234567 1.2.* 任何带有字母字符的东西

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

      • 1. (?: 2. 这甚至会匹配 10.5.,这是不正确的
      • 好的,它适用于三重数字,但我们不能保证即使这将匹配1.2.3.4.5.6,只要格式(number.number...等),无论有多少数字/浮动- 点数/数字有吗?
      • @zerkms:比赛将只包含 10.5,但是是的,我明白你的意思。
      【解决方案4】:

      我认为这应该更有意义:

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

      如果超过 1 个数字,每个数字分量都必须以非零开头。

      【讨论】:

      • 很遗憾没有,可能是010.5.3,所以确实不是完整版系统但是很像。
      • @LordCover 没关系。那我会投票给zerkms的答案。 ;)
      【解决方案5】:

      这可能是一个老话题,但我发现了同样的问题并找到了一些更简单的解决方案,因此这可能有助于寻找答案的人。 这个(\[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)

      【讨论】:

        【解决方案6】:

        没有彻底测试它,但就是这样:-)

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-31
          • 2014-08-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多