संक्षेप में, नहीं। विम का रेगेक्स एक अद्वितीय स्वाद है, और इसे और अधिक स्वाद की तरह व्यवहार करने के लिए कोई विकल्प नहीं है।
मुझे लगता है यह एक अच्छी बात है।
जादू
'magic'
विकल्प regex का स्वाद नहीं बदलता है कि विम का उपयोग करता है। यह बस कई- \
गायब परमाणुओं के व्यवहार का विरोध करता है।
उदाहरण के लिए, डिफ़ॉल्ट रूप से, +
एक शाब्दिक +
चरित्र है, \+
जिसका अर्थ है "पूर्ववर्ती परमाणु का एक या अधिक"। इसके विपरीत, का *
अर्थ है "पूर्ववर्ती परमाणु का शून्य या अधिक", जबकि \*
एक शाब्दिक है *
। कई लोगों को यह काफी भ्रामक लगता है। \v
अपने पैटर्न में उपयोग करना इसे थोड़ा अधिक सुसंगत बनाता है। :help 'magic'
एक अच्छा सारांश देता है:
after: \v \m \M \V matches ~
'magic' 'nomagic'
$ $ $ \$ matches end-of-line
. . \. \. matches any character
* * \* \* any number of the previous atom
() \(\) \(\) \(\) grouping into an atom
| \| \| \| separating alternatives
\a \a \a \a alphabetic character
\\ \\ \\ \\ literal backslash
\. \. . . literal dot
\{ { { { literal '{'
a a a a literal 'a'
व्यक्तिगत रूप से, मुझे लगता है कि कोड फ़ाइलों के लिए डिफ़ॉल्ट व्यवहार अच्छा है, जहां foo(
शाब्दिक का उपयोग करके चीजों की खोज करना असामान्य नहीं है (
।
विम का अपना रेगीक्स स्वाद
मैंने कई लोगों को देखा है जो विम का समर्थन करते हैं। व्यक्तिगत रूप से, मुझे लगता है कि अन्य उपकरण रेमीक्स के विम के स्वाद का समर्थन करते हैं। इसकी कुछ क्षमताएं हैं जो पीसीआरई में हासिल करने के लिए या तो असंभव हैं या बहुत बोझिल हैं।
पीसीआरई में असंभव
लुकअराउंड एक सामान्य विशेषता है जहां आप यह दावा कर सकते हैं कि जिस पैटर्न को आप मैच करने की कोशिश कर रहे हैं उसके पहले या बाद में एक पैटर्न या तो मेल नहीं खाता है या नहीं। उदाहरण के लिए, PCRE पैटर्न q(?!u)
(या Vim regex पैटर्न qu\@!
) एक से मेल q
नहीं खाता है u
। (यह तुलना में अधिक सही है q[^u]
, जिसके लिए आवश्यक है कि इसके बाद कुछ चरित्र हो q
।)
चर-लंबाई नकारात्मक लुकअप
पीसीआरई, और कई अन्य स्वादों में एक प्रतिबंध है कि एक नकारात्मक लुकबाइंड पैटर्न निश्चित लंबाई का होना चाहिए। इसका मतलब है कि एक पैटर्न जैसे (?<![a-z]{3})foo
, जिसका अर्थ है "स्ट्रिंग foo
जो कि 3 लोअरकेस अक्षरों से पहले नहीं है ") ठीक है, लेकिन (?<![a-z]+)foo
(मतलब "स्ट्रिंग किसी भी संख्या के निचले अक्षरों foo
से पहले नहीं है ") नहीं है।
यह प्रतिबंध विम में मौजूद नहीं है। विम में, जैसा पैटर्न \([a-z]\+\)\@<!foo
, जबकि देखने में थोड़ा बदसूरत है, पूरी तरह से मान्य है।
विम रीगेक्स में आसान
कुछ चीजें विम के स्वाद में बहुत अच्छे हैं।
मैच एंकर की शुरुआत और अंत
मेरी राय में, सबसे उल्लेखनीय \zs
और \ze
एंकर हैं। ये आपको मैच की शुरुआत और अंत निर्दिष्ट करने की अनुमति देते हैं। उदाहरण के लिए, foo(\zs.*\ze)
केवल एक फ़ंक्शन कॉल के बीच (
और उसके बीच क्या मेल खाता है । यह पीसीआरई में किया जा सकता है, लेकिन इसमें लुक-अप के उपयोग की आवश्यकता होती है, जो थोड़ा थकाऊ है:)
foo(...)
(?<=foo\().*(?=\))
उपसर्ग मिलान
एक और अच्छी बात जो विम कर सकती है वह है वर्णों के किसी विशेष क्रम का कोई उपसर्ग (खाली उपसर्ग सहित)। उदाहरण के लिए, पर मैच के लिए f
, fo
, foo
, या food
, पैटर्न f\%[ood]
इस्तेमाल किया जा सकता। पीसीआरई में, ऐसा पैटर्न दिखेगा f(o(od?)?)?
। (एक लंबी स्ट्रिंग के लिए कल्पना कीजिए!)
मिलान कर्सर, रेखा और स्तंभ स्थिति
विम के रेगेक्स में बफर में मिलान स्थितियों के लिए कुछ एंकर हैं।
\%23c
स्तंभ 23 से मेल खाता है
\%<23c
कॉलम 23 से पहले मेल खाता है
\%>23c
कॉलम 23 के बाद मैच
\%16l
मैच लाइन 16
- स्तंभ के समान, पंक्ति संख्या से पहले या बाद के लिए लंगर होते हैं
\%#
कर्सर की स्थिति से मेल खाता है
मुझे लगता है कि रेमीक्स के विम स्वाद को गले लगाने लायक है। यह मुख्य रूप से प्रोग्रामिंग के लिए उपयोग किए जाने वाले पाठ संपादक में उपयोग के लिए अच्छी तरह से अनुकूल है, और यह काफी शक्तिशाली है।
\v
शामिल<>
हैं, जो AFAIK विम के लिए अद्वितीय है। तो नहीं, बस उन्हें "विम रेगेक्स" के रूप में वर्णित करें। (उत्तर के रूप में पोस्टिंग नहीं कर रहा हूं क्योंकि मैं सकारात्मक नहीं हूं)