Vi में Regex: कोई समूह के अंदर वर्ण वर्गों का उपयोग कैसे करता है? (जैसे [\ s \ w])


15

विम में, चरित्र वर्ग \sकिसी भी व्हाट्सएप चरित्र से मेल खाता है। जब मैं समूहों में उन विशेष वर्णों का उपयोग कर रहा हूँ जैसे [\s\w]कि यह किसी एक व्हाट्सएप या शब्द चरित्र से मेल नहीं खाता है, तो यह मेल खाता है sया w

कोई समूह के अंदर वर्ण वर्गों का उपयोग कैसे करता है?


8
नियमित अभिव्यक्ति इंजनों के कुछ कार्यान्वयनों के विपरीत, विम की वह धारणा का समर्थन नहीं करता है। [[:space:][:alnum:]_]के संग्रह को अनुमानित करने के लिए इस्तेमाल किया जा सकता है \sऔर \w, हालांकि।
पीटर लेवरिन

@PeterLewerin कृपया एक उत्तर के रूप में पोस्ट करें।
क्रिस्टोफर बॉटम्स

@ChristopherBottoms: किया गया।
पीटर लेवरिन

जवाबों:


11

यह एक समूह नहीं है, यह एक सीमा है, और विम में आप वर्ण वर्गों का उपयोग नहीं कर सकते हैं (हालांकि यह अन्य रेगेक्स कार्यान्वयन में संभव है, जैसे कि अजगर में )। आपको इसके बजाय एक वैकल्पिक उपयोग करना होगा :

/\(\w\|\s\)

या:

/\v(\s|\w)

(या, पीटर लेवरिन द्वारा प्रस्तावित समाधान )।


2
सिर्फ इसलिए कि कोई चरित्र वर्ग में एक अमान्य श्रेणी का निर्माण कर सकता है, इसका मतलब यह नहीं है कि \sचरित्र वर्ग की तरह कुछ का उपयोग करना संभव नहीं होना चाहिए । विम का रेगेक्स कार्यान्वयन उस विकल्प को बनाने के लिए होता है, लेकिन अन्य कार्यान्वयन आपको उपयोग करने की अनुमति देते हैं [\s]
जैमेसन

@VanLaser यदि आप इस जानकारी के साथ उत्तर को संपादित करते हैं ([\ s] अन्य रेगेक्स-कार्यान्वयन में एक अस्पष्टता है, लेकिन इसका मतलब नहीं है) तो मैं आपके उत्तर को स्वीकार करूंगा!
जॉन एचके

(सब ठीक है, जोड़ा गया)
VanLaser

11

नियमित अभिव्यक्ति इंजन के कुछ कार्यान्वयन के विपरीत, विम [\s\w]संग्रह में उस अंकन ( ) का समर्थन नहीं करता है । हालांकि, POSIX चरित्र वर्ग के भावों का उपयोग किया जा सकता है ।

  • [:blank:]के रूप में ही है \s
  • [:space:]व्हॉट्सएप के पात्रों की तुलना में अधिक संख्या में मेल खाता \sहै, और इसके बराबर लगता है \_s
  • [:alnum:]सन्निकटन \w, लेकिन अंडरस्कोर ( _) से मेल नहीं खाता ।

इसलिए जो संग्रह आप चाहते थे, वह लिखा जा सकता है [[:blank:][:alnum:]_]या [[:space:][:alnum:]_]

मैं परीक्षण द्वारा यह सत्यापित नहीं किया है, लेकिन यह में दर्ज है :h regexp, :h /character-classesऔर :h /collection

पोर्टेबिलिटी नोट: अन्य रेगेक्स इंजनों में, \sआमतौर पर विम के समान [:space:](या \_s) होता है।

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