如何使用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}")
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()
我正在尝试使用 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}")
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()