For the replacement string, you need to use "\\1" -- the backslash in that
context needs to be escaped to get through the CMake language, so that the
regex engine sees "\1" internally...



On Thu, Dec 13, 2012 at 1:38 PM, Matthew Woehlke <
[email protected]> wrote:

> Consider this line of CMake code:
>
> string(REGEX REPLACE "^([^.]*)(\..*)?$" "\1" BAR "${FOO}")
>
> It looks reasonable to me, and works fine on !Windows. However, on
> Windows, I get these errors:
>
> Syntax error in cmake code at <elided> when parsing string
> ^([^.]*)(\..*)?$
> Invalid escape sequence \.
>
> Syntax error in cmake code at <elided> when parsing string
> \1
> Invalid escape sequence \1
>
>
> Is this expected? The documentation doesn't seem to explicitly mention
> replacement placeholders, but they are implicitly mentioned when talking
> about () capturing.
>
> Also, I can use "^([^.]*)([.].*)?$" instead to get around the first error,
> but then I get an error that the capture is empty. (It shouldn't be;
> "${FOO}" is non-empty and the pattern is guaranteed to have a non-ambiguous
> match for non-empty input.)
>
> --
> Matthew
>
> --
>
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/**
> opensource/opensource.html<http://www.kitware.com/opensource/opensource.html>
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/**CMake_FAQ<http://www.cmake.org/Wiki/CMake_FAQ>
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/cgi-**bin/mailman/listinfo/cmake-**developers<http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers>
>
--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to