विम में मल्टी-लाइन रेगेक्स समर्थन


116

मुझे लगता है कि मानक रेगेक्स सिंटैक्स को कई लाइनों के मिलान के लिए उपयोग करना है, जैसे कि:

This is\nsome text
/This.*text/s

यह पर्ल में उदाहरण के लिए काम करता है, लेकिन विम में समर्थित नहीं लगता है। इसके बजाय, मुझे और अधिक विशिष्ट होना चाहिए:

/This[^\r\n]*[\r\n]*text/

मुझे ऐसा क्यों होना चाहिए, इसका कोई कारण नहीं मिल रहा है, इसलिए मैं सोच रहा हूं कि मैं शायद विम की मदद में संबंधित बिट्स को याद कर रहा हूं।

क्या कोई इस व्यवहार की पुष्टि कर सकता है एक तरीका या दूसरा?

जवाबों:


176

हां, पर्ल का //sसंशोधक विम रेग्जेस पर उपलब्ध नहीं है। :h perl-patternsविवरण और विम और पर्ल रीगेक्स के बीच अन्य अंतरों की सूची देखें ।

इसके बजाय आप उपयोग कर सकते हैं \_., जिसका अर्थ है "न्यूलाइन सहित किसी भी एकल चरित्र से मेल खाता है"। यह आपके पास जितना है उससे थोड़ा कम है। देखते हैं :h /\_.

/This\_.*text/

4
अच्छा - मेरा जीवन थोड़ा आसान हो गया। मैं कर रहा हूँ (। | \ N) *
ojrac

2
फॉरवर्ड स्लैश :h /\_.डू क्या करता है? मेरा मतलब है, मुझे पता है कि यह काम करता है, लेकिन :h /\_.काम क्यों करता है , और क्यों नहीं :h \_.?
जूल

2
@ निर्दिष्ट स्लैश (जो खोज के लिए डिफ़ॉल्ट कुंजी है) को निर्दिष्ट करता है, \_.जिसके संदर्भ को आप पढ़ सकते हैं जैसे निर्दिष्ट करता है : मुझे खोज अभिव्यक्ति के लिए मदद दें\_.
फ़्लोरियन

हालांकि, ऐसा लगता है कि मैं इस अभिव्यक्ति के साथ आलसी मिलान नहीं कर सकता, भले ही मैंने इसे कोष्ठक में शामिल किया हो? इसे करने का कोई तरीका है?
18

2
@JIXiang पर आलसी मैच के लिए foo bar \n foo baz \n foo, कोशिश/foo\_.\{-}foo
जेम्स एम लेटाओ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.