我试图找出一个用于版本解析器的正则表达式。 我需要解析一个包含major.minor.patch.build版本字符串的版本,该版本字符串包含3到4位数字,最后一位(第4位)是可选的。
例如,版本可以是:
1.2.3.4
要么
1.2.3
我的正则表达式如下,但是对于1.2.3
版本字符串失败:
regex = "(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)?"
还需要双反斜杠吗?
答案 0 :(得分:1)
以下应做您想做的事:
(\d+)\.(\d+)\.(\d+)(\.(\d+))?
\d
匹配任何单个数字<=> [0-9]
\.
以匹配.
字符(正则表达式中的单个.
匹配任何单个字符)
您可以在正则表达式前加上'^'并在其后附加'$',以确保在您的版本之前或之后都没有垃圾。
答案 1 :(得分:1)
在正则表达式中,您必须将最后一个\.(\d+)
部分(包括点)设为可选,否则它将与1.2.3.4
但也与1.2.3.
匹配
尝试使用最后一个可选的组,其中点和数字是可选的:
或者具有捕获组,最后一个是非捕获组,该捕获组带有点,最后一个数字为捕获组:
^(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?$
您可以使用word boundary \b
^
和$
没有指定有关双反斜杠的编程语言,但是当您打开regex101演示链接时,可能会有所帮助,工具-> 代码生成器您可以在其中选择一种编程语言。也许这会有所帮助。