17

スラッシュをバックスラッシュに置き換えようとしています。それを行うには、次のコード行があります。

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

SourceGroupPath = A/ファイル/パス. SourceGroup は、結果を設定する変数です。

私が抱えている問題は、コードの「\\」部分にあります。「\\」のようなバックスラッシュ リテラルを使用し、Unicode を使用する方法をいくつか試しましたが、何もうまくいかないようです。

CMakeで発生するエラーは次のとおりです。

CMakeLists.txt:41 (STRING) での CMake エラー: 文字列サブコマンド REGEX、モード REPLACE: 置換式は円記号で終わります。

誰かが私を助けてくれますか?

ありがとう、

ウーター

4

2 に答える 2

27

その理由は、CMake 文字列リテラルではバックスラッシュがエスケープ文字 (C、Java、JavaScript と同様) であり、正規表現ではバックスラッシュもエスケープ文字であるためです

したがって、正規表現を文字列リテラルとして表すには、二重のエスケープが必要です。(これが、多くの「高水準」言語が正規表現リテラル表記法を持っている理由です。)

文字列リテラル"\\"はメモリ内の文字列"\"を表し、これは無効な正規表現であるため、「バックスラッシュで終わる」エラーが発生します。

文字列リテラル"\\\\""\\"、メモリ内で有効な正規表現 (単一のバックスラッシュを表す) を表します。

于 2010-12-20T15:12:16.547 に答える