正则表达式.
匹配任何字符,包括分号 ( ;
) 和换行符 ( \n
)。这就是为什么.*
您的正则表达式的一部分与文件的所有中间“记录”匹配的原因。
因此,您需要.
在您的正则表达式中替换为[^;\n]
,这与您的记录的分隔符不匹配:
string(REGEX REPLACE "C:/Users/mycode/[^;\n]*/\./[^;\n]*/"
"" TEMP
"<inputfilecontent>")
另请注意,您需要将文件内容括在双引号中。问题是您的文件包含分号;
,不带引号的形式被 CMake 解释为参数分隔符。
string(REGEX REPLACE)的特殊之处在于它连接所有输入参数,因此没有引号的分号将丢失。
可运行示例:
cmake_minimum_required(VERSION 3.10)
project(replace_lines)
set(LINES
[=[
TESTA:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
TESTB:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
TESTC:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
]=]
)
message(STATUS "Lines: ${LINES}")
string(REGEX REPLACE "C:/Users/mycode/[^;\n]*/\./[^;\n]*/"
"" RESULT
"${LINES}"
)
message(STATUS "Result: ${RESULT}")
输出:
-- Lines: TESTA:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
TESTB:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
TESTC:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
-- Result: TESTA:out_stra.bin;out_strb.bin;out_strc.bin
TESTB:out_stra.bin;out_strb.bin;out_strc.bin
TESTC:out_stra.bin;out_strb.bin;out_strc.bin