2009-09-14 10 views
119

मैं निम्नलिखित परिवर्तन करने के लिए इंटेलिजे की खोज-और-प्रतिस्थापन सुविधा का उपयोग करना चाहता हूं:IntelliJ में regex बैकरेफर

// Replace this 
model.put('foo', 'bar') 
// With this 
model['foo'] = bar 

मैंने निम्न कोशिश की है:

ढूंढने के लिए पाठ: model.put\((.*),(.*)\) इसके साथ बदलें: model\[\\1\] = \\2

लेकिन Intellij \\1 और \\2 को बैकरेफर के रूप में पहचानने लगते नहीं हैं। मैंने एक भी स्लैश की कोशिश की है, लेकिन यह भी काम नहीं करता है।

धन्यवाद, डॉन

उत्तर

177

इंटेलीजे $1के लिए प्रतिस्थापन backreferences उपयोग करता है।

इंटेलीजे की मदद से

:

नियमित अभिव्यक्ति और उनके वाक्य विन्यास पर अधिक जानकारी के लिए java.util.regex वापस संदर्भ के लिए दस्तावेज़ देखें, $ n होना चाहिए बल्कि \ n प्रारूप से।

+14

की तरह "\" लगता है की आवश्यकता नहीं है: https://www.jetbrains.com/idea/help/finding-and-replacing-text-in-file.html # d1765718e362। इसके अलावा, मेरे लिए यह केवल तभी काम करता है जब मैं स्पष्ट रूप से अपने समूह को "()" से घिरा हुआ हूं, अन्यथा मैं इसे बाद में संदर्भित नहीं कर सकता। पूर्व: खोज '' '(foo)' '' प्रतिस्थापित करें: '' '$ 1bar''' – Ghedeon

+0

@ गढ़ेन: आपको शायद अपनी टिप्पणी को उत्तर या मौजूदा उत्तर के रूप में जोड़ना चाहिए। अभिव्यक्ति को रखने के लिए आपका सुझाव() है जो मेरे लिए काम करता है। – mindreader

+0

मेरी संबंधित समस्या हल करने वाली जानकारी का थोड़ा सा +1: मैं कुछ टेम्पलेट तारों में डॉलर-घुंघराले रैपर, यानी '+ var +' '' '{var}' के साथ चर के चारों ओर उद्धरण-प्लस रैपर बदल रहा हूं। इंटेलिज प्रतिस्थापन खत्म नहीं करेगा क्यों पता नहीं लगा सका। प्रतिस्थापन में '$ 'को बचने की जरूरत है। – worc

0

IntelliJ विचार/संदर्भ/नियमित अभिव्यक्ति सिंटैक्स संदर्भ


से मेल खाता है उपसूचक और मैच याद रखता है। यदि आपको समान नियमित अभिव्यक्ति के भीतर मिलान किए गए सबस्ट्रिंग का उपयोग करने की आवश्यकता है, तो आप बैकरेफर (\ num, जहां num = 1..n) का उपयोग करके इसे पुनर्प्राप्त कर सकते हैं। यदि आपको वर्तमान नियमित अभिव्यक्ति के बाहर मिलान किए गए सबस्ट्रिंग को संदर्भित करने की आवश्यकता है (उदाहरण के लिए, प्रतिस्थापन फ़ील्ड में एक और नियमित अभिव्यक्ति में), तो आप इसे डॉलर के चिह्न ($ num, जहां num = 1..n) का उपयोग करके पुनर्प्राप्त कर सकते हैं। यदि आपको कोष्ठक वर्णों को उप-अभिव्यक्ति में शामिल करने की आवश्यकता है, तो "(" या ")" का उपयोग करें।

+0

मुझे वही चीज़ मिली [यहां] (http://www.jetbrains.com/idea/webhelp/regular-expression-syntax-reference.html); हालांकि, मुझे अंततः बैकस्लैश के बिना $ 1 का उपयोग करके सफलता मिली। –

+0

@ जॉयट्रिकिको धन्यवाद! बैकस्लैश को छोड़कर यह मेरे लिए भी हल हो गया। – oskarth

0

आइडिया 9.0 (और शायद अन्य संस्करणों) में रेगेक्स के लिए इन-उत्पाद प्रासंगिक सहायता गलत प्रतीत होती है।

 
    Back references 
    \n 
    Whatever the nth capturing group matched 

लेकिन जाहिरा तौर पर, के रूप में पिछले जवाब में उल्लेख किया है और मेरे अनुभव है, यह वास्तव में \ वापस संदर्भ के लिए $ n है, बजाय \ N

क्लिक करके आप यह प्रासंगिक मदद करने के लिए मिल: यह इस में कहा गया है '[सहायता]' लिंक पर "नियमित अभिव्यक्ति" रेडियो विकल्प के आगे "टेक्स्ट बदलें" संवाद बॉक्स

12

संक्षेप में, आप प्रतिस्थापन backreferences के लिए $n को $1 उपयोग करना चाहिए। \1 वाक्यविन्यास केवल खोज के भीतर बैकरेरेंस के लिए है।

इंटेलिज 2016 में, इन-ऐप दस्तावेज़ भ्रामक है।

से अधिक भुगतान नहीं सबस्ट्रिंग कहीं (एक प्रतिस्थापन स्ट्रिंग के रूप में उदाहरण के लिए, एक और नियमित अभिव्यक्ति में) वर्तमान नियमित अभिव्यक्ति के बाहर का उल्लेख करने की जरूरत है, तो आप इसे का उपयोग कर प्राप्त कर सकते हैं: यहाँ पूरी डॉक्स से एक बेहतर उद्धरण है डॉलर का चिह्न ($ num, जहां num = 1..n)।

स्रोत: 2016.1 regular expression syntax, Tips & Tricks