CMake:如何在Regexp中替换反斜杠文字?

Wou*_*rvD 14 regex string cmake backslash

我试图用反斜杠替换forwardslashes.要做到这一点,我有以下代码行:

STRING(REGEX REPLACE "/" "\\" SourceGroup ${SourceGroupPath} )
Run Code Online (Sandbox Code Playgroud)

SourceGroupPath = A/File/Path.SourceGroup是将结果设置为的变量.

我遇到的问题是代码的"\\"部分.我已经尝试了几种方法来使用反斜杠文字,如"\\"和使用unicode,但似乎没有任何工作.

我在CMake中遇到的错误是:

CMakeLists.txt处的CMake错误:41(STRING):字符串子命令REGEX,mode REPLACE:replace-expression以反斜杠结尾.

有人可以帮帮我吗?

谢谢,

沃特

Tom*_*lak 24

其原因是,在CMake的字符串中,反斜杠是一个转义字符(就像在了C,Java或JavaScript)和正则表达式,反斜杠是一个转义字符,以及.

因此,要将正则表达式表示为字符串文字,您需要双重转义.(这就是为什么许多"更高级别"的语言都有正则表达式字面符号,BTW.)

字符串文字"\\"表示内存中的字符串"\",这是一个无效的正则表达式,因此"以反斜杠结尾"错误.

字符串文字"\\\\"表示"\\"在内存中,它是有效的正则表达式(表示单个反斜杠).

  • 正斜杠在正则表达式中没有意义.它可能*在宿主语言中有意义,但前提是主语言使用正斜杠来分隔正则表达式文字.在这种情况下,它必须在正则表达式文字中转义.(许多宿主语言以这种方式工作,因此您可能会认为正斜杠在正则表达式中有些特殊.它不是.) (2认同)

lgw*_*est 11

这是一种更简单的方法

file(TO_NATIVE_PATH ${MYPATH} MYPATH)
Run Code Online (Sandbox Code Playgroud)