CMake中的版本正则表达式

问题描述:

我想验证用户指定的版本字符串 - 以确保它由三个由句点分隔的数字(e.g. 1.20.300)组成。
但我不知道如何写这样的正则表达式,下面的代码也只是一种尝试:CMake中的版本正则表达式

if(PROJECT_VERSION MATCHES "([0-9]+).([0-9]+).([0-9+])") 
    message("NOTE: Valid version string") 
else() 
    message(FATAL_ERROR "Invalid version string") 
endif() 

那么,如何正确书写要求正则表达式?
谢谢。

UPD
我正则表达式也匹配1.2.3.4,但不应该!
只有三个以时间分隔的数字是可能的。

+0

尝试'“^([0-9] +)[。]([0-9] +)[。]([0-9] +)$”' –

+0

@Biffen它也匹配例如,'1.2.3.4'字符串。但是不应该! – eraxillan

点在正则表达式特殊,所以你应该逃避他们:

"^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" 

为什么双反斜线?看这里:https://*.com/a/4490920/4323

+0

好吧,看起来像它的作品! :)你可以简要解释为什么你使用'^'和'$'? 另外,我仍然不明白CMake支持哪些正则表达式语法方言。例如。这里没有'\ d'(任何数字)运算符 – eraxillan

+0

'^'和'$'分别表示字符串的“开始”和“结束”。这可以防止匹配像abc1.2.3xyz这样的垃圾。 –

+0

明白了。这就是为什么我的原始正则表达式匹配1.2.3 **。4 **。谢谢! – eraxillan