2017-02-20 13 views
1

自動的に作成されたLinuxスクリプトを修正したかったのですが、私はfindAll(String, String)の機能を使って"$APP_ARGS"を変更しています。Groovyでドル記号で二重引用符で囲まれた文字列の部分文字列を見つける方法

私が試してみましたバリアント:

replaceAll('"$APP_ARGS"', 'simulators ' + '"\\\\$APP_ARGS"') - doesn't find 
replaceAll('\"\$APP_ARGS\"',... - doesn't find 
replaceAll('"\$APP_ARGS"',... - doesn't find 
replaceAll('\\"\\$APP_ARGS\\"',... - editor warning - excessive escape 
replaceAll('"\\\\$APP_ARGS"',... - doesn't find 
replaceAll('\\\\"\\\\$APP_ARGS\\\\"',... - doesn't find 
replaceAll($/"$$APP_ARGS"/$, ...) - does not find 
replaceAll('"[$]APP_ARGS"', 'something simple')  - finds. 
replaceAll('"[$]APP_ARGS"', '"\\\\$APP_ARGS"')  - fails. 

見ての通り、私は正規表現の形式を使用している場合、発見は[OK]を動作します。しかし、エスケープな仕事をする方法はありますか?私はそれも置換文字列に$が必要です。

Groovyのマニュアルによれば、/../ stringはスラッシュを除いてエスケープする必要はありません。しかし、

replaceAll(/"$APP_ARGS"/,... 

も、メッセージで不明なプロパティ 'APP_ARGS'を取得できませんでした。

この関数の動作にはロジックがないと思われ、正しい解決策を実験で見つける必要があります。

+0

あなたはGStringsとRegExpを一度に戦っています。 'replace'だけを使うと、一重引用符で囲まれた文字列を使うことができ、正規表現の引用符を扱う必要はありません。例えば'' $ ARGS'.replace( '$ ARGS'、 "-l") ' – cfrick

+0

純粋な文字列である2番目のパラメータと同じ問題ではないと私は信じていました。また、最初のパラメータBTWもPatternではなくString型です。これは私が話していることです:最初のパラメータはStringとして宣言されていますが、Pattern - partlyとして動作します。論理なし。 – Gangnus

+0

あなたが何かを試していない限り、これは第二引数とは関係ありません。それは私の質問ではっきりしません。 $ ARGS "'、' -l" $ ARGS "')'を置き換えてください。それがあなたが期待していないものなら、詳しく記述してください。 'replaceAll'は最初のparamとして正規表現を望んでいます(あなたの文字列を1つに変換します)。 – cfrick

答えて

1
replaceAll('"\\$APP_ARGS"', 'simulators ' + '"\\$APP_ARGS"') 

追加の可能性の問題が\\$前に交換し、交換し、両方の文字列であるべきであるということです。

replaceAllの最初の引数は常に正規表現として扱われるため、$(行末)を引用する必要があります。 2番目のパラメータは、正規表現のグループへの逆参照を含むことがあります。これは$で始まります。したがって、引用符を付ける必要があります。

安全な方法は、replaceAllの代わりにreplaceの代わりに、両方のパラメータをすでに引用/エスケープすることです。

関連する問題