2009-06-29 11 views
6

के लिए नियमित अभिव्यक्ति स्पष्टीकरण यदि मैं पाठ 'रूबी' के साथ सभी पंक्तियां चाहता हूं लेकिन 'myruby' नहीं तो मैं यही करूंगा।विम

:g/\<ruby\>/ 

मेरा प्रश्न यह है कि यहां प्रतीक से कम और उससे अधिक का अर्थ क्या है? रूबी में प्रोग्रामिंग करते समय मैंने उपयोग की जाने वाली एकमात्र नियमित अभिव्यक्ति है।

इसी तरह अगर मैं लगातार तीन रिक्त लाइनों लगाना चाहते हैं तो यह मैं

/^\n\{3} 

क्या करेंगे मेरा प्रश्न क्यों मैं पहली बार घुंघराले ब्रेस बचने हूँ (घुंघराले ब्रेस खोलने) लेकिन दूसरे घुंघराले बचने नहीं है ब्रेस (घुंघराले ब्रेस बंद)?

उत्तर

13

\< और \> शब्द शब्द सीमाएं। पर्ल में, grep और कम (3 ओटीओएच नाम देने के लिए) आप इसके लिए \b का उपयोग करते हैं, इसलिए मुझे लगता है कि यह रूबी में समान है।

आपके दूसरे प्रश्न के संबंध में, पूरी अभिव्यक्ति {3} के लिए भागने की आवश्यकता है। आप प्रत्येक घुंघराले ब्रेस से बच नहीं रहे हैं, बल्कि पूरी चीज एक साथ हैं।

अधिक के लिए this question देखें।

0

अपना पहला नियमित अभिव्यक्ति के लिए, आप भी कर सकता है:

:g/[^\ ]ruby\/

इससे यह सुनिश्चित होगा वहाँ से पहले और अपने गहरे लाल रंग का कीवर्ड के बाद एक जगह थी।

+3

लेकिन यह लाइन के आरंभ या अंत में 'रूबी' से मेल नहीं खाएगा। –

+0

@ नाथन अच्छा बिंदु ... – samoz

+0

और न ही 'एक सुंदर रूबी', और न ही 'इस रूबी चुरा लिया,' ... –

16

बैकस्लैश के लिए विम के नियम regexes में भागने के नियम लगातार नहीं हैं। आपको \{...} के उद्घाटन ब्रेस से बचना है, लेकिन [...] को कोई भी भागने की आवश्यकता नहीं है, और एक कैप्चर समूह \(...\) (खुले और करीबी दोनों माता-पिता से बच रहा है)। अन्य असंगतताएं भी हैं।

शुक्र है कि विम आपको magic सेटिंग्स के माध्यम से, रेगेक्स-बाय-रेगेक्स आधार पर भी इस व्यवहार को बदलने देता है। यदि आप रेगेक्स की शुरुआत में \v डालते हैं, तो बचने के नियम अधिक सुसंगत हो जाते हैं; संख्याओं, अक्षरों और अंडरस्कोर को छोड़कर सब कुछ "जादू" है, इसलिए आपको बैकस्लाश की आवश्यकता नहीं है जब तक कि आप उन के अलावा एक शाब्दिक चरित्र डालना नहीं चाहते हैं।

आपका पहला उदाहरण :g/\v<ruby>/ बन जाता है और आपका दूसरा उदाहरण /\v^\n{3} बन जाता है। अधिक जानकारी के लिए :h /magic और :h /\v देखें।

+2

आप हमेशा जादू मोड रखने के लिए अपने जादू को 'जादू सेट' कर सकते हैं। जिस तरह से मुझे लगता है कि एक 'जादू' अभिव्यक्ति \ m \ v का अर्थ है 'कोई जादू' – Oli

+0

नहीं, वास्तव में \ v का अर्थ है "बहुत जादू"। जिसका अर्थ है कि '0' - '9', 'ए' - 'z', 'ए' - 'Z' और '_' को छोड़कर सभी ASCII वर्णों का एक विशेष अर्थ है, इसलिए उन्हें भागने की आवश्यकता नहीं है। – binOr