2012-05-25 7 views
6

私はGroovyでreplaceAll()を使用していて、置換文字列に$シンボル(正規表現グループ参照として解釈されます)が含まれているときにキャッチしています。Groovy replaceAllここで置換にドル記号が含まれていますか?

replacement = "$bar" 

そして、所望の結果は次のとおりです:

def regexpSafeReplacement = replacement.replaceAll(/\$/, '\\\\\\$') 
replaced = ("foo" =~ /foo/).replaceAll(regexpSafeReplacement) 

replaced = "$bar" 

より良いのがあり

私は、私はむしろ醜いダブル交換を行う必要があります見つけることです中間段階なしでこの交換を実行する方法は?

+0

あなたの入力文字列が何をし、何を出力あなたは期待していますか? –

+0

私は質問 –

答えて

8

それはdocs for replaceAllで言うように、あなたはMatcher.quoteReplacement

def input = "You must pay %price%" 

def price = '$41.98' 

input.replaceAll '%price%', java.util.regex.Matcher.quoteReplacement(price) 

を使用することができます。またその代わりに二重引用符のことに注意してください:

replacement = '$bar' 

replacement = "$bar" 

あなたが好きな単一引用符を使用したいです

そうでない場合、Groovyはそれをテンプレートとして扱い、ca bar

ので、プロパティを見つけることができませんあなたの例のために:使用単一引用符と二重のスラッシュ交換するのGradleファイルに

import java.util.regex.Matcher 
assert '$bar' == 'foo'.replaceAll('foo', Matcher.quoteReplacement('$bar')) 
+0

を明確にしました非常にありがとうTim、完璧に動作します –

+0

この交換を行うためにファイルをどのように指定しますか? –

関連する問題