正则找匹配字符
参考文档: https://juejin.cn/s/cmake%20string%20regex%20match%20group
CMake 支持正则表达式匹配,可以使用 string(REGEX MATCH ...)
命令来匹配字符串中的某一模式。如果匹配成功,可以使用捕获组(capture group)来提取匹配的子串。
语法:
string(REGEX MATCH <regular expression> <output variable> <input> [<input> ...])
示例:
set(string "hello world")
string(REGEX MATCH "(hello) ([a-z]+)" match_result ${string})
message("Match result: ${match_result}")
# Match result: hello world
# Extract capture groups
set(greeting ${CMAKE_MATCH_1})
set(word ${CMAKE_MATCH_2})
message("Greeting: ${greeting}")
# Greeting: hello
message("Word: ${word}")
# Word: world
在上面的示例中,string(REGEX MATCH ...)
命令会在字符串 "hello world"
中匹配模式 "(hello) ([a-z]+)"
,并将匹配结果存储在变量 match_result
中。捕获组在结果中以数字索引形式存在,可以使用 CMAKE_MATCH_<index>
变量来访问。
使用示例
查找路径
cmake_minimum_required(VERSION 3.5)
project(event_demo)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_STANDARD 14)
message(STATUS ${PROJECT_SOURCE_DIR})
get_filename_component(AP_SRC_DIR "${PROJECT_SOURCE_DIR}" DIRECTORY)
get_filename_component(AP_SRC_DIR "${AP_SRC_DIR}" DIRECTORY)
message(STATUS ${AP_SRC_DIR})
string(REGEX MATCH "(.*)ap/" AP_SRC_DIR ${PROJECT_SOURCE_DIR})
message(STATUS ${AP_SRC_DIR})
输出: /data/Project/GitLab/LCPP/src/P/ap/
如果使用get_filename_component(AP_SRC_DIR "${PROJECT_SOURCE_DIR}" DIRECTORY)
需要调用多次。