क्या मैं कर सकता हूँ: लाइन के अंतिम मैच पर काम कर रहा हूँ?


16

:s/pattern/replacementपहले मैच और :s/pattern/replacement/gसभी पर काम कर रहा है।

केवल पिछले एक पर कैसे काम करें?

जवाबों:


18

मै इस्तेमाल करूंगा \zs

:%s/.*\zspattern/replacement/

थोड़ा सा स्पष्टीकरण:

  • . किसी भी एक चरित्र का प्रतिनिधित्व करता है
  • * लालची मिलान (अधिक से अधिक) का प्रतिनिधित्व करता है

विम में आप शून्य चौड़ाई एंकर उपयोग कर सकते हैं \zsऔर \zeआरंभ और खोज पैटर्न है, जो आप का मिलान करना चाहते के अंत परिभाषित करने के लिए। आपके पैटर्न के पहले \zsऔर बाद \zeमें कुछ भी प्रतिस्थापन से अप्रभावित रहेगा।

इसे समझना आसान बनाने के लिए, मैं विकिया के खोज और प्रतिस्थापन से इस उदाहरण का उपयोग करना चाहूंगा :

एक पैटर्न के प्रारंभ और अंत को सेट करके \zsऔर टाइप करके सहेजें \ze। उदाहरण के लिए, इसके बजाय:

:s/Copyright 2007 All Rights Reserved/Copyright 2008 All Rights Reserved/ 

उपयोग:

:s/Copyright \zs2007\ze All Rights Reserved/2008/

अधिक जानकारी के लिए, देखें


क्या आप कृपया \zsअपने उत्तर में एक मूल विवरण प्रदान कर सकते हैं ?
एवरग्रीनट्री

3
यह लायक यह देखते हुए कि कारण यह काम करता है क्योंकि है .*है लालची
वाइल्डकार्ड

7

आप सभी को समूहीकृत करके अंतिम मैच की खोज कर सकते हैं \(.*\), लेकिन अंतिम ऑवररेंस pattern। फिर पकड़े गए समूह के साथ बाहर निकलना \1, और जोड़ना replacement

:%s/\(.*\)pattern/\1replacement/

(यह @ ryuichiro के \zsसमाधान से हीन है , जिसमें आपका \1दृष्टिकोण कार्यात्मक रूप से समतुल्य है, लेकिन अधिक क्रिया है। (दूसरी ओर, कुछ के लिए याद रखना आसान हो सकता है, खासकर यदि वे अन्य रेगेक्स फ्लेवर के लिए उपयोग किए जाते हैं))
हारून थोमा

0

पूर्णता के लिए मुझे लगा कि मैं एक विकल्प पोस्ट करूंगा। विम में बहु-आइटम हैं, जिनमें से कुछ अधिक मानक नियमित अभिव्यक्ति लुकअप अभिकथन (नकारात्मक / सकारात्मक लुकहैड / लुकबाइंड) के समान हैं। /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups

इस मामले में हम एक नकारात्मक लुकहेड चाहते हैं \@!, जिसका अर्थ है कि हम यह दावा करना चाहते हैं कि आइटम से पहले होने वाला परमाणु पैटर्न के बाद नहीं होता है । इस मामले में परमाणु वह पैटर्न है जो किसी और चीज से पहले है:

:%s/pattern\(.*pattern\)\@!/replacement/

कोष्ठकों के अंदर का हिस्सा शून्य-चौड़ाई वाला है और मैच में शामिल नहीं है इसलिए प्रतिस्थापन द्वारा प्रतिस्थापित नहीं किया जाता है।

:h \@!अधिक जानकारी के लिए या :h pattern-multi-itemsअन्य लुकअराऊन भिन्नताओं वाले पूरे खंड के लिए।

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