我有一个字符串“abc def ghi
”,我想使用CMake将其拆分为“abc
”和“def ghi
”。在我的脚本中,我有以下两行:
string(REGEX REPLACE "[ ].*" "" NAME ${VAR} )
string(REGEX REPLACE "^[^ ]*[ ]" "" OPTIONS ${VAR} )
第一行按预期工作,但第二行始终只输出最后提供的参数。我尝试使用sed
复制我的问题,以检查我的模式是否存在任何问题并找到以下结果:
echo "abc def ghi" | sed "s/^[^ ]*[ ]//"
输出“def ghi”echo "abc def ghi" | sed "s/^[^ ]*[ ]//g"
输出“ghi”所以我的问题似乎是string(REGEX REPLACE)
使用它的最后一个操作的输出作为下一个操作的输入,就像在第二个sed
命令中一样。在string
的文档中,它说:
REGEX REPLACE将尽可能多地匹配正则表达式,并将替换表达式替换为输出中的匹配。
但是没有提到观察到的“管道输出”行为,这使得^
运算符在我的情况下无用。这是多重匹配正则表达式的众所周知的行为吗?是否可以强制^
仅匹配第一个输入的实际开始,而不是每个连续输入的开始?
答案 0 :(得分:0)
用string(REGEX MATCHALL "[ ](.*)" OPTIONS ${LIB} )
替换第二行做我想做的事(忽略前导空格,但这不是什么大问题)。但是,它仍然没有回答关于此CMake函数之外的更一般上下文中的预期行为的问题以及更严格的使用^
。