【问题标题】:How to match version name later than 1.1.7? (or any version that I want)如何匹配 1.1.7 之后的版本名称? (或我想要的任何版本)
【发布时间】:2021-12-15 22:23:04
【问题描述】:

我正在使用 Firebase 远程配置,并且根据我当前的设置,使配置仅发布给具有正确版本的用户的唯一方法是使用正则表达式。

我正在寻找与 A.B.C 之后发布的任何版本匹配的正则表达式

所以如果新版本是 x.y.z 则必须满足以下条件才能匹配:

(x > A) or {(x = A) and [(y > B) or ((y = B) and (z > C))]}

实数示例:

匹配任何等于或高于 1.1.7 的版本:

匹配:

1.1.7
1.1.8
1.1.69
1.2.0
1.10.0
2.0.0

不匹配:

1.1.6
1.0.34
0.5.0
0.77.0

我已经尝试过这个正则表达式:^(([2-9]|[0-9]{2,}).*|1\.(([0-9]{2,}).*|[1-9]\.([0-9]{3,}|[0-9]{2,}|[7-9]))),但它与 1.2.0 不匹配

【问题讨论】:

    标签: regex version


    【解决方案1】:

    你可以使用

    ^(?:1\.(?:1\.(?:[789]|[1-9]\d+)|(?:[1-9]\d+|[2-9])\.\d+)|(?:[1-9]\d+|[2-9])\.\d+\.\d+)$
    

    Regex demo

    模式匹配:

    • ^ 字符串开始
    • (?:非捕获组
      • 1\.匹配1.
      • (?:非捕获组
        • 1\.匹配1.
        • (?:[789]|[1-9]\d+) 匹配 7 8 9 或 10+
        • |或者
        • (?:[1-9]\d+|[2-9]) 10+ 或 2-9
        • \.\d+ 匹配 . 和 1+ 位 0-9
      • )关闭非捕获组
      • |或者
      • (?:非捕获组
        • [1-9]\d+10+
        • |或者
        • [2-9]第2-9场
      • )关闭非捕获组
      • \.\d+\.\d+ 匹配 . 1+ 位 . 1+ 位
    • )关闭外部非捕获组
    • $字符串结束

    【讨论】:

    • 感谢您的回答。如果将来当我将我的应用程序更新到 v1.0.4、v1.3.0 等时......我如何为新版本号编写自己的正则表达式?你有什么建议吗?
    • @TrongNguyen 正则表达式不能使用数字计数,因此对于版本号中的所有部分,您必须检查可能的范围。在我的回答中,我首先检查1.1.range_here 部分,然后是1.,然后是 2-9 或大于 10 部分等。对于单个范围,您可以使用可以在 SO 上找到的正则表达式范围生成器和其他地方在线>
    【解决方案2】:

    你可以试试这个正则表达式:

    ^([2-9]|1\d|1\.([2-9]|1\d|1\.([7-9]|\d\d)))

    演示here

    【讨论】:

    • 这仅匹配“1.2.0”的“1.2”部分。我不确切知道 Firebase 正则表达式检查是如何工作的,但您不需要匹配整个版本名称字符串才能工作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    相关资源
    最近更新 更多