Pregunta

Estoy tratando de reemplazar forwardslashes con barras invertidas. Para ello tengo la siguiente línea de código:

STRING(REGEX REPLACE "/" "\\" SourceGroup ${SourceGroupPath} )

SourceGroupPath = A / Archivo / Path. SourceGroup es la variable para ajustar el resultado a.

El problema que estoy teniendo es con el "\\" parte del código. He intentado varias maneras de llegar a utilizar la barra invertida literal como "\\" y el uso de Unicode, pero nada parece funcionar.

El error que consigo en CMake es:

Error CMake en CMakeLists.txt: 41 (Cadena): expresión regular de control secundario, reemplazar extremos de expresión: Modo de sustitución en una barra invertida.

Puede alguien ayudarme por favor hacia fuera?

Gracias,

Wouter

¿Fue útil?

Solución

La razón es que en un literal de cadena CMake, la barra invertida es un carácter de escape (al igual que en C, Java o JavaScript) y en expresiones regulares, la barra invertida es un carácter de escape y .

Así que para representar una expresión regular como un literal de cadena, necesita el doble escape. (por eso muchos idiomas "nivel superior" tienen expresiones regulares literal notación, por cierto.)

El "\\" literal cadena representa el "\" cadena en memoria y que es una expresión regular no válida, por lo tanto los "extremos en una barra invertida" error.

El "\\\\" literal cadena representa "\\" en la memoria, que es una expresión regular válida (que representa una sola barra invertida).

Otros consejos

Esta es una manera más sencilla de hacerlo

file(TO_NATIVE_PATH ${MYPATH} MYPATH)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top