/ रूबी में गैर ASCII वर्णों के लिए सीमा जाँच के लिए नियमित अभिव्यक्ति

रूबी [डुप्लिकेट] में गैर ASCII वर्णों के लिए रेंज जांच के लिए नियमित अभिव्यक्ति - रूबी-ऑन-रेल, रूबी, रेगेक्स

मैं उन पात्रों को विभाजित करना चाहता हूं जो एएससीआईआई प्रारूप में नहीं हैं, यानी यूटीएफ -8 मैंने कोड की यह पंक्ति लिखी है

result = string.scan(/[x0600-x06ff]/)

और किसी तरह यह काम नहीं कर रहा है, और त्रुटि दे

"empty range in char class : /[x0600-x06ff]/".

मैं सिर्फ यह देखना चाहता हूं कि क्या कोई चरित्र नियमित अभिव्यक्ति की सीमा में आता है। यदि ऐसा है, तो इसे विभाजित करें।

उत्तर:

जवाब के लिए 3 № 1

आपकी समस्या यह है कि आप "का उपयोग कर रहे हैं x गलत तरीके से। xHH उस बाइट को निर्दिष्ट करता है जो है HH हेक्साडेसिमल में। इसका मतलब है कि x0600 वास्तव में है x06, 0, तथा 0 और आपका पूरा वर्ण वर्ग दिखता है (भागों को अलग करने के लिए रिक्त स्थान)

x06 0 0-x06 f f

और एकमात्र सीमा है 0-x06 और वह नहीं है जो आप चाहते हैं। यदि आप यूनिकोड को हेक्स मान द्वारा निर्दिष्ट करना चाहते हैं, तो आप उपयोग करना चाहते हैं u:

/[u0600-u06ff]/

इसके अलावा, आपकी सीमा बहुत अधिक गैर-एएससीआईआई मानों को याद करती है (जैसे कि "µ" जो है u00b5), आप "का उपयोग करना बेहतर होगा वासिली "रों /[^[:ascii:]]/ POSIX नाम चरित्र वर्ग या /[^p{ASCII}]/.


उत्तर № 2 के लिए 1

रूबी doesn "t समर्थन यूनिकोड टोकन इसमें" रेगेक्स के कार्यान्वयन "

अगर मैं कोशिश करता हूँ u0000 मुझे एक त्रुटि मिलती है जो कहती है कि यह समर्थित नहीं है।
यदि रूबी का आपका संस्करण इसका समर्थन करता है, तो सीमा है [u0000-uFFFF]

आप POSIX वर्ग का उपयोग करके देख सकते हैं [^[:ascii:]] सब कुछ गैर- ASCII मैच करने के लिए।
आप भी कोशिश कर सकते हैं [^x00-xFF] उन सभी चीजों का मिलान करने के लिए जिनके पास 0-255 का दशमलव मान नहीं है।