【问题标题】:Matching semantic version with regex使用正则表达式匹配语义版本
【发布时间】:2018-04-17 08:54:33
【问题描述】:

我正在尝试将语义版本与正则表达式匹配,其中补丁(或第 3 位)是可选的。我已经完成了大部分工作,但最后一个可选数字在我的组中不会匹配。

示例位于:https://regex101.com/r/ZuitFG/3

我正在尝试匹配以下版本:

Release 2.6 Now Live
Release 12.46.30 Now Live
Release 2.6.0 Now Live
Release 2.6.1 Now Live

使用/Release (\d+\.\d+[\.\d]?)/,它只匹配x.x.,并且从不包括最后一组数字。我已经多次阅读了这个正则表达式的解释,但我看不到我做错了什么。

【问题讨论】:

  • [\.\d] 表示“一个点一个数字” - 使用(?:\.\d+)?,这是一个可选的非捕获组,匹配一个点后跟一个数字匹配 1 到无限次.
  • [...] 始终匹配单个字符。

标签: regex


【解决方案1】:

[\.\d]? 是可选的character class,匹配. 或数字,1 次或0 次。

这就是为什么如果在两个数字和点序列之后有一个. + 数字序列,则只匹配一个点。

您必须使用grouping constructnon-capturing group 似乎是这里最好的,因为它不会创建任何其他子组:

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

请参阅regex demo

(?:\.\d+)? 匹配. 的可选(1 或 0 次)序列,然后是 1+ 位。

【讨论】:

    猜你喜欢
    • 2014-08-10
    • 2022-07-22
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多