2017-01-05 11 views
0

私は文字列 "abc def ghi"を持っており、CMakeを使って "abc"と "def ghi"に分割したいと思います。予想通りCMakeの奇妙な文字列(REGEX REPLACE)の動作

string(REGEX REPLACE "[ ].*" "" NAME ${VAR}) 
string(REGEX REPLACE "^[^ ]*[ ]" "" OPTIONS ${VAR}) 

最初の行は、しかし、二番目は、常に最後の指定された引数を出力した作品:私のスクリプトでは、私は2つの行を次のようしています。

  • echo "abc def ghi" | sed "s/^[^ ]*[ ]//"出力「DEF GHI」
  • echo "abc def ghi" | sed "s/^[^ ]*[ ]//g"出力「GHI」

:私は、次のような結果が私のパターンのいずれかの問題があるかどうかを確認するためにsedを使用して私の問題を再現しようとしましただから私の問題は、string(REGEX REPLACE)は、最後の操作の出力を次の入力への入力として使用していることです.2番目のsedコマンドのようです。 stringのドキュメントでは、

REGEX REPLACEは正規表現とできるだけ多く一致させ、一致するものは出力に置き換えます。

しかし、私のケースでは^オペレータを役に立たないレンダリングする「パイプ出力」動作については言及していません。これは、複数の一致する正規表現のよく知られた動作ですか? ^を、連続した各入力の開始ではなく、最初の入力の実際の開始だけに一致させることは可能ですか?

答えて

0

2行目をstring(REGEX MATCHALL "[ ](.*)" OPTIONS ${LIB})に置き換えると、先行するスペースは無視されますが、大したことではありません。しかし、このCMake関数の外でより一般的な文脈で期待される振る舞いとより厳密な用法についての質問にはまだ答えません。^