CMake正则表达式匹配

时间:2018-09-10 09:14:12

标签: regex cmake

我有一个CMake字符串变量:

set(var "String0 String_1 String_2")

我需要从此变量("String0")中选择第一个空格之前的内容,然后使用此内容创建一个新变量。

我使用CMake的REGEX MATCH方法执行此操作,并使用了此正则表达式:'\S\w*'。我已经在在线正则表达式解释器上测试了该正则表达式,并且可以正常工作。

我已经在CMake中编写了此代码(当然设置了变量之后):

string(REGEX MATCH "\S\w*" NEW_VAR "${VAR}")

执行此操作时,脚本会抱怨无效跳过字符(Sw)。因此,接下来,我尝试转义两个斜杠:

string(REGEX MATCH "\\S\\w*" NEW_VAR "${VAR}")

现在NEW_VAR等于'S',而不是我期望的"String0"

由于我对正则表达式和CMake的了解很少,请帮助我纠正这一点。

2 个答案:

答案 0 :(得分:1)

您还可以搜索第一个出现的空格字符的位置,并从该字符串的开头选择substring到该位置:

set(var "String_0 String_1 String_2")

string(FIND ${var} " " wsloc)
message(STATUS "position of first whitespace character: ${wsloc}")

string(SUBSTRING ${var} 0 ${wsloc} newvar)
message(STATUS "selected substring: \"${newvar}\"")

答案 1 :(得分:0)

我已经使用了它并且有效(不确定在所有情况下它的性能如何):

。[((A-z)|(a-z)|(0-9)] *