【问题标题】:Version regular expression in CMakeCMake中的版本正则表达式
【发布时间】:2015-11-02 12:05:49
【问题描述】:

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

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-9]+)[.]([0-9]+)[.]([0-9]+)$"
  • @Biffen 它也匹配 1.2.3.4 字符串,例如。但不应该!

标签: regex cmake


【解决方案1】:

点在正则表达式中是特殊的,所以你应该转义它们:

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

为什么要使用双反斜杠?见这里:https://stackoverflow.com/a/4490920/4323

【讨论】:

  • 好的,看起来可以了! :) 你能简单解释一下你为什么使用^$ 吗?此外,我仍然无法理解 CMake 支持的正则表达式语法方言。例如。这里没有\d(任何数字)运算符
  • ^$ 分别表示字符串的“开始”和“结束”。这样可以防止匹配像 abc1.2.3xyz 这样的垃圾。
  • 知道了。这就是我原来的正则表达式匹配 1.2.3**.4** 的原因。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
相关资源
最近更新 更多