मैच शब्द जिसमें ए-जेडए-जेड से परे अक्षर हों


15

किसी शब्द का मिलान करने के लिए कोई भी उपयोग कर सकता है

\v(\w+)

विम मदद से :h \w:

\ w शब्द चरित्र: [0-9A-Za-z_]

यह ठीक उसी तरह काम करता है जैसा कि मैनुअल में वर्णित है। हालाँकि, मैं ऐसे शब्दों से मेल खाना चाहता हूं जिनमें वर्ण परे हों a-z, जैसे prästgården । इसके बजाय तीन मैचों के लिए prästgården पैदावार के \v(\w+)खिलाफ नियमित अभिव्यक्ति का मिलान :

prästgården
^^ ^^^ ^^^^

वर्णों से परे शब्दों का मिलान कैसे करें a-z? मेरा स्थान अंग्रेजी में सेट है और यदि संभव हो तो मैं इसे इस तरह रखना चाहूंगा।

संपादित करें: शब्द एक ही स्थान से संबंधित नहीं हो सकते हैं, जैसे

prästgården
treść

POSIX चरित्र वर्ग (उदाहरण [[:alpha:]]\+के लिए इस मामले में) आप जो चाहते हैं वह यहाँ करने वाले हैं, लेकिन विम डॉक्स ( :help regex) के अनुसार यह नहीं है: "ये आइटम केवल 8-बिट वर्णों के लिए काम करते हैं।" यह ओएस एक्स 10.8 पर विम 7.3 के साथ यहां काम करने के लिए होता है, लेकिन लिनक्स पर विम 7.3 काम नहीं करता है, इसलिए मुझे लगता है कि इस विम के बारे में कुछ ऐप्पल-विशिष्ट है जो इसे अनुमति देता है। आपको यह भी पता चलेगा कि विम पर्ल बाइंडिंग के माध्यम से ऐसा करना भी विफल हो जाता है, हालांकि पर्ल के पास बहुत अच्छा यूनिकोड समर्थन है। आपको बाहरी पर्ल स्क्रिप्ट पर स्विच करने की आवश्यकता हो सकती है, जिससे आप पूर्ण यूनिकोड समर्थन चालू कर सकते हैं।
वॉरेन यंग

वैसे, यदि आप पर्ल के साथ जाते हैं, तो आप \p{Word}पोसिक्स चरित्र वर्ग के बजाय उपयोग करना चाहते हैं । Perl के POSIX चरित्र वर्ग हैंडलिंग में बहुत सारे अपवाद मामले हैं, जो आप यूनिकोड गुणों के बजाय उपयोग करने से बचते हैं।
वॉरेन यंग

जवाबों:


9

विम (संस्करण 7.3 के रूप में) पैटर्न में गैर-एएससीआईआई पात्रों के समर्थन के संबंध में बहुत सीमित है। विशेष रूप से,\w केवल ASCII अक्षरों से मेल खाता है, जो सीमित उपयोगिता का है।

कुछ वर्ण वर्ग पैटर्न हैं जो यूनिकोड का समर्थन करते हैं। आपकी रुचि के हैं \I, जो बड़े और अक्षरों से मेल खाते हैं और केवल अक्षर, प्लस _और @। कम से कम डेबियन निचोड़ पर (एक UTF-8 लोकेल में), त्रुटियां हैं; उदाहरण के लिए ×और ÷अक्षरों के रूप में मेल खाते हैं, लेकिन सभी लैटिन उच्चारण अक्षरों को सही ढंग से पहचाना जाता है। \Iके माध्यम से कॉन्फ़िगर किया जा सकता हैisidentविकल्प के , कम से कम ASCII भाग के लिए।

यदि आप गंभीर यूनिकोड समर्थन चाहते हैं, तो आपको एक बाहरी उपकरण पर भरोसा करना होगा। उदाहरण के लिए perl -C -e '/\p{L}/'UTF-8 अक्षरों (UTF-8 लोकेल मानकर) का मिलान करना।



2

यह सिरिलिक के लिए भी काम करता है

\v\k

थोड़ा और अधिक जटिल और सिरिलिक के साथ विफल हो जाता है

\v(\c[0-9a-z_[=a=][=c=][=e=][=i=][=l=][=n=][=o=][=r=][=s=][=t=][=u=][=y=][=z=]])

डॉक्टर

विम 7.4 पर परीक्षण किया गया।


मैं [=l=]उस सूची में जोड़ łदूंगा जो (जैसे złoty) को कवर करेगी , आदि। लेकिन यह रूसी के लिए पहले से ही विफल है। वैसे भी, साझा करने के लिए धन्यवाद।
मार्को
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.