IntExJ में RegEx backreferences


129

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

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

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

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

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

जवाबों:


196

IntelliJ प्रतिस्थापन backreferences के $1लिए उपयोग करता है ।

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

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


15
लगता है जैसे "\" की आवश्यकता नहीं है: jetbrains.com/idea/help/… । इसके अलावा, मेरे लिए यह केवल तभी काम करता है जब मैं अपने समूह को "()" के साथ स्पष्ट रूप से घेरता हूं, अन्यथा मैं बाद में इसका संदर्भ नहीं दे सकता। Ex: खोज (foo)बदलें:$1bar
Ghedeon

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

+1 कि मेरे संबंधित समस्या हल सूचना के बिट: मैं डॉलर घुंघराले रैपर, यानी साथ, चर के आसपास बोली से अधिक रैपर की जगह कर रहा हूँ '+ var +'करने के लिए ${var}कुछ टेम्पलेट तार में और समझ नहीं सकता है क्यों IntelliJ प्रतिस्थापन खत्म नहीं होता। पता चलता है $कि प्रतिस्थापन में बच निकलने की जरूरत है।
21

13

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

IntelliJ 2016 में, इन-ऐप प्रलेखन भ्रामक है। यहाँ पूर्ण डॉक्स से बेहतर उद्धरण दिया गया है:

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

स्रोत: 2016.1 नियमित अभिव्यक्ति वाक्यविन्यास, टिप्स और ट्रिक्स


2

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

  वापस संदर्भ
  \ n
  जो भी एनएच कैप्चरिंग ग्रुप से मेल खाता है

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

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


0

इंटेलीज आईडिया / संदर्भ / नियमित अभिव्यक्ति सिंटैक्स संदर्भ


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


मुझे यहाँ वही मिला ; हालांकि, मुझे अंततः $ 1 का उपयोग करके सफलता मिली, बिना बैकलैश के।
जो ट्रिकारिको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.