如何使用cmake regex获取括号“()”内的字符串

How get string inside bracket "()" using cmake regex

我正在尝试使用 CMake 正则表达式获取“( )”内的字符串。 这是我试过的例子:

set(STR "example(arg1,arg2)")
string(REGEX MATCH "^\(.*\)$" ARG_STR ${STR}) 

预期:arg1,arg2,但我得到了 example(arg1,arg2) 请指导我如何解决这个问题。

您可以使用带有模式 lie 的捕获组

string(REGEX MATCH "\(([^()]*)\)" _ ${STR}) 

然后,您可以使用${CMAKE_MATCH_1}访问内容,例如

message("ARGS_STR: ${CMAKE_MATCH_1}")

CMAKE reference details:

New in version 3.9: All regular expression-related commands, including e.g. if(MATCHES), save subgroup matches in the variables CMAKE_MATCH_ for <n> 0..9.

另请参阅 regex demo

问题已经正确回答。但我想展示一种简单的方法来添加错误检查以防正则表达式失败。

set(STR "example(arg1,arg2)")

if (${STR} MATCHES "\(([^()]*)\)")
    message(STATUS ${CMAKE_MATCH_1})
else()
    message(FATAL_ERROR "Regex failed!")
endif()