उदात्त पाठ 2 में नियमित अभिव्यक्ति खोज प्रतिस्थापित होती है


440

मैं सब्बल टेक्स्ट 2 में नियमित अभिव्यक्तियों के साथ खोज प्रतिस्थापित करना चाह रहा हूं। इस पर प्रलेखन एनीमिक है। विशेष रूप से, मैं समूहों पर एक प्रतिस्थापन करना चाहता हूं, इसलिए इस पाठ को रूपांतरित करने जैसा कुछ:

Hello my name is bob

और यह खोज शब्द:

क्या ढूँडो: my name is (\w)+

से बदलो: my name used to be $(1)

खोज शब्द बस ठीक काम करता है, लेकिन मैं वास्तव में regexp समूह का उपयोग करने का एक तरीका पता नहीं लगा सकता।

जवाबों:


584

आमतौर पर बैक-रेफरेंस पहले कैप्चर ग्रुप (कोष्ठकों में एक पैटर्न का पहला मैच) के लिए $1या \1(बैकस्लैश वन) होता है, और वास्तव में सबलाइम दोनों सिंटैक्स का समर्थन करता है। इसलिए कोशिश करें:

my name used to be \1

या

my name used to be $1

यह भी ध्यान दें कि आपका मूल कैप्चर पैटर्न:

my name is (\w)+

गलत है और केवल पूरे नाम के बजाय नाम के अंतिम अक्षर पर कब्जा करेगा। नाम के सभी अक्षरों को पकड़ने के लिए आपको निम्नलिखित पैटर्न का उपयोग करना चाहिए:

my name is (\w+)

15
सिवाय, यह नहीं है $0?
स्काईलर सेवलैंड

11
नहीं, $ 0 का उपयोग एक नियमित अभिव्यक्ति में बैक-रेफ़रेंस के रूप में नहीं किया जाता है (क्योंकि \0अशक्त वर्ण के बराबर है, और \0dddकोड बिंदु ddd वाले वर्ण के भागने के रूप में उपयोग किया जाता है)। हालाँकि, इस पृष्ठ के$0 अनुसार Sublime2 में एक "निकास चिह्न" के रूप में उपयोग किया जा रहा है (हालांकि मुझे यह जानने के लिए पर्याप्त उदाहरण खोजने में परेशानी हो रही है कि Sublime2 में निकास चिह्न का उपयोग कैसे किया जाता है)।
बोबुलस

3
$0एक स्निपेट विस्तार से बाहर निकलने पर कर्सर को रखने के लिए एग्जिट मार्क का उपयोग सब्बल टेक्स्ट 2/3 में किया जाता है। स्निपेट पर अधिक
jhhorn424

2
$ 0 अभी भी उदात्त पाठ 2 में पूरी अभिव्यक्ति को
पीछे हटाने के

2
$0पूरे रेगेक्स मैच है; $1पहला कब्जा समूह है।
ओलेथा

103

वैसे, उपरोक्त प्रश्न में:

के लिये:

Hello, my name is bob

भाग ढूंढें:

my name is (\w)+

बदले हुए भाग के साथ:

my name used to be \1

लौटूंगा:

Hello, my name used to be b

भाग को बदलें:

my name is (\w+)

और वह जगह होगी जो आप उम्मीद करते हैं:

Hello, my name used to be bob

जबकि (\ w) + "बॉब" से मेल खाएगा, यह वह समूह नहीं है जिसे आप प्रतिस्थापन के लिए चाहते हैं।


52

महत्वपूर्ण: ( )अपनी खोज स्ट्रिंग में कोष्ठकों का उपयोग करें

जबकि पिछला उत्तर सही है पर जोर देने के लिए एक महत्वपूर्ण बात है! आपके खोज स्ट्रिंग के सभी मिलान वाले सेगमेंट जिन्हें आप अपने प्रतिस्थापन स्ट्रिंग में उपयोग करना चाहते हैं, को कोष्ठक द्वारा संलग्न किया( ) जाना चाहिए , अन्यथा ये मिलान किए गए सेगमेंट परिभाषित चर जैसे $1, $2या \1, \2आदि के लिए सुलभ नहीं होंगे ।

उदाहरण के लिए, हम 'px' के साथ 'em' को बदलना चाहते हैं लेकिन अंक मानों को संरक्षित करते हैं:

    margin: 10em;  /* Expected: margin: 10px */
    margin: 2em;   /* Expected: margin: 2px */
  • प्रतिस्थापन स्ट्रिंग: margin: $1pxयाmargin: \1px
  • margin: ([0-9]*)emकोष्ठक के साथ खोज स्ट्रिंग (सही): //
  • खोज स्ट्रिंग (INCORRECT): margin: [0-9]*em

सुधार मामला उदाहरण:margin: ([0-9]*)em खोज स्ट्रिंग (कोष्ठक के साथ) का उपयोग करना । निम्नलिखित के रूप में कोष्ठकों द्वारा वांछित मिलान वाले खंड (जैसे $1या \1) संलग्न करें ( ):

  • खोजें: margin: ([0-9]*)em(कोष्ठक के साथ)
  • करने के लिए बदलें: margin: $1pxयाmargin: \1px
  • परिणाम:
    margin: 10px;
    margin: 2px;

प्रोत्साहन मामले का उदाहरण:margin: [0-9]*em खोज स्ट्रिंग (कोष्ठक के बिना) का उपयोग करना । निम्नलिखित रेगेक्स पैटर्न वांछित रेखाओं से मेल खाएगा लेकिन मिलान किए गए सेगमेंट बदले हुए स्ट्रिंग में उपलब्ध नहीं होंगे जैसे कि चर : $1या\1

  • खोजें: margin: [0-9]*em(कोष्ठक के बिना)
  • करने के लिए बदलें: margin: $1pxयाmargin: \1px
  • परिणाम:
    margin: px; /* `$1` is undefined */
    margin: px; /* `$1` is undefined */

1
धन्यवाद, यह जवाब वास्तव में एक दिलचस्प तथ्य को इंगित करता है जिसने मेरी समस्या को हल किया।
एनकेक

इस पर ध्यान दिलाने के लिए धन्यवाद। के साथ (), मैं सब्बल 3 में \ 1 के साथ प्रतिस्थापित कर सकता हूं
जेफरी

47

यहाँ अनुमोदित उत्तर की एक दृश्य प्रस्तुति है।

यहां छवि विवरण दर्ज करें


क्यों नहीं मिल रहा है $_SESSION[(\w+)? धन्यवाद
टोनी मिशेल क्यूबेट

क्योंकि $, [, (, और) विशेष वर्ण हैं, इसलिए आपको बैकस्लैश के साथ प्रत्येक विशेष चरित्र से बचना चाहिए।
ज़ेवन

25

ध्यान दें कि यदि आप 9 से अधिक कैप्चर समूहों का उपयोग करते हैं तो आपको सिंटैक्स का उपयोग करना होगा ${10}

$10या \10या \{10}होगा नहीं काम करते हैं।


धन्यवाद! मेरे द्वारा कैप्चर किए गए समूह के अंत में एक नंबर को जोड़ने और जोड़ने के लिए यह मददगार था, उदाहरण के लिए 1दूसरे कैप्चर समूह को जोड़ने के लिए जिसे आपको ब्रेसिज़ का उपयोग करने की आवश्यकता है ${2}1; $ 21, 21 वें कैप्चर ग्रुप को संदर्भित करता है, जो मौजूद नहीं है।
एरिक

1

खोज और प्रतिस्थापन पर उदात्त पाठ अनौपचारिक दस्तावेज़ के लेख को देखकर , ऐसा लगता +(.+)है कि आप चाहते हैं कि कब्जा समूह है ... लेकिन मैंने व्यक्तिगत रूप से उपयोग किया है (.*)और यह अच्छी तरह से काम करता है। जिस तरीके से आप कह रहे हैं, उसे आप मंचों में इस बातचीत को पसंद कर सकते हैं , विशेष रूप से यह पोस्ट जो $1पहले कैप्चर किए गए समूह का उपयोग करने के लिए उपयोग करने के लिए कहता है ।

और चूंकि चित्र शब्दों से बेहतर हैं ...

इससे पहले: खोजने / बदलने से पहले

उपरांत: खोजने / बदलने के बाद

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.