2012-05-25 6 views
6

मैं ग्रोवी में replaceAll() का उपयोग कर रहा हूं और प्रतिस्थापन स्ट्रिंग में $ प्रतीक (जिसे रेगेक्सपी समूह संदर्भ के रूप में व्याख्या किया गया है) में पकड़ा जा रहा है।ग्रोवी प्रतिस्थापन जहां सभी प्रतिस्थापन में डॉलर का प्रतीक होता है?

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

कहाँ:

replacement = "$bar" 

और वांछित परिणाम है:

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" 

आप की तरह एकल उद्धरण का उपयोग करना चाहते

अन्यथा ग्रोवी इसे टेम्पलेट के रूप में मानेंगे और जब यह ca संपत्ति नहीं मिल bar

तो, आपके उदाहरण के लिए:

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

को स्पष्ट किया है धन्यवाद बहुत टिम, पूरी तरह से काम करता है –

+0

इस प्रतिस्थापन को करने के लिए आप फ़ाइल को कैसे निर्दिष्ट करते हैं? –

0

Gradle फ़ाइलें उपयोग एकल उद्धरण और डबल स्लैश को बदलने के लिए में:

'\\$bar' 
संबंधित मुद्दे