2012-09-29 8 views
6

यह आदेशजीएनयू ग्रेप regex `[一 - 十]` (दस करने के लिए एक) चीनी चरित्र 四 से मेल नहीं खाता (चार)

$ echo '一二三四五六七八九十' | grep -oE '[一-十]' 

आउटपुट:

一 
二 
三 
五 
六 
七 
八 
九 
十 

regex [一-十] (एक से दस) चीनी संख्याओं के खिलाफ मैच होने की उम्मीद है। उदाहरण के अनुसार, यह चीनी वर्ण (चार) को छोड़कर प्रत्येक चीनी संख्या के विरुद्ध एक से दस तक मेल खाता है।

क्यों?

क्या यह एक बग या मजाक है?

मैं इसे मजाक के रूप में सोच सकता हूं, क्योंकि चीनी '四' (चार) में समान रूप से '事' (चीज़) लगता है। वास्तव में, चीनी की कुछ बोलीभाषाओं में, वे एक ही उच्चारण साझा करते हैं। इस प्रकार '一 二三 五六七 八 九十' (एक दो तीन पांच छः सात आठ नौ दस) का अर्थ है '沒 四' (कोई चार नहीं), यानी '沒事' (कोई बात नहीं)

संस्करण बीटीडब्ल्यू, संस्करण grep का उपयोग मैं करता हूं:

GNU grep 2.5.4 

उत्तर

7

चीनी संख्या यूनिकोड में क्रम में नहीं है। वह 四 यू + 56 डीबी है, जबकि 一 यू +4 ई 00 है, और 10 5341 है। तो 4 फिट नहीं है।

अधिक जानकारी के लिए यूनिकोड मानक पढ़ें, और http://www.unicode.org/charts/PDF/U4E00.pdf देखें।

+0

आपकी त्वरित प्रतिक्रिया के लिए धन्यवाद। हाउवर, मैं '一' के बजाय '-' (ascii, चीनी वर्ण नहीं) का उपयोग करता हूं। तो यह एक सीमा के खिलाफ मेल खाता है। क्या आप अपना जवाब संपादित कर सकते हैं? तो मैं इसे स्वीकार कर सकता हूँ। – weakish

+0

@weakish bmargulies आपकी सीमा के पहले चरित्र के बारे में बात कर रहा है, न कि अंतराल के बीच डैश। – lanzz

+0

@lanzz मेरी गलती को इंगित करने के लिए धन्यवाद। '一' और '-' समान दिखता है। मुझे 'यू + 4 ई00' देखा जाना चाहिए था। – weakish

2

मैं एक चीनी मंच पर इस से पूछा, और alvin_rxg इस के साथ उत्तर:

一 => U+4E00 
十 => U+5341 
四 => U+56DB 

तो मैं ज्ञात मैं सिर्फ एक मूर्खतापूर्ण धारणा बनाया! grep वह स्मार्ट नहीं है। रेगेक्स [一 - 十] (एक से दस) चीनी संख्याओं के विरुद्ध मिलान करने की उम्मीद है। यह सिर्फ '一' (U + 4E00) और '十' (U + 5341) के बीच किसी भी वर्ण से मेल खाता है। ऐसा होता है कि सभी चीनी संख्याएं '四' (यू + 56 डीबी) को छोड़कर उस सीमा में हैं!

हालांकि इसे ठंडा मजाक के रूप में उपयोग किया जा सकता है। ;-)

संबंधित मुद्दे