正则表达式需要可选的最后一位数字

时间:2018-06-27 18:18:43

标签: regex

我试图找出一个用于版本解析器的正则表达式。 我需要解析一个包含major.minor.patch.build版本字符串的版本,该版本字符串包含3到4位数字,最后一位(第4位)是可选的。

例如,版本可以是: 1.2.3.4 要么 1.2.3

我的正则表达式如下,但是对于1.2.3版本字符串失败:

regex = "(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)?"

还需要双反斜杠吗?

2 个答案:

答案 0 :(得分:1)

以下应做您想做的事:

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

\d匹配任何单个数字<=> [0-9]

\.以匹配.字符(正则表达式中的单个.匹配任何单个字符)

您可以在正则表达式前加上'^'并在其后附加'$',以确保在您的版本之前或之后都没有垃圾。

答案 1 :(得分:1)

在正则表达式中,您必须将最后一个\.(\d+)部分(包括点)设为可选,否则它将与1.2.3.4但也与1.2.3.匹配

尝试使用最后一个可选的组,其中点和数字是可选的:

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

或者具有捕获组,最后一个是非捕获组,该捕获组带有点,最后一个数字为捕获组:

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

您可以使用word boundary \b

来代替锚点^$

没有指定有关双反斜杠的编程语言,但是当您打开regex101演示链接时,可能会有所帮助,工具-> 代码生成器您可以在其中选择一种编程语言。也许这会有所帮助。