में बहु-बाइट वर्ण क्या libc6
के regexp फ़ंक्शन regcomp
और regexec
प्राप्त करने के लिए वैसे भी बहु-बाइट वर्णों के साथ काम करने के लिए है?libc regcomp और regexec
उदाहरण के लिए, यदि मेरा पैटर्न utf8 वर्ण 猫机+猫
है, तो utf8 एन्कोडेड स्ट्रिंग 猫机机机猫
पर एक मिलान ढूंढने में विफल रहेगा, जहां यह सफल होना चाहिए।
मुझे लगता है कि इस वजह से चरित्र 机
की बाइट प्रतिनिधित्व \xe6\x9c\xba
है, और +
एक या बाइट \xba
के अधिक मिलान किया जाता है। मैं इस उदाहरण को पैटर्न में प्रत्येक मल्टीबाइट चरित्र के चारों ओर कोष्ठक डालकर काम कर सकता हूं, लेकिन चूंकि यह एक एप्लिकेशन के लिए है, इसलिए मुझे उपयोगकर्ताओं को ऐसा करने की आवश्यकता नहीं है।
क्या यूटीएफ 8 अक्षरों के रूप में मिलान करने के लिए पैटर्न या स्ट्रिंग को ध्वजांकित करने का कोई तरीका है? शायद libc
को पैटर्न के बजाय चार के बजाय wchar के रूप में स्टोर करने के लिए कह रहे हैं?
बहु-बाइट चार के आसपास के माता-पिता मदद नहीं करते हैं? – stark
मैं ऐसा कर सकता हूं, लेकिन मैं ऐसे समाधान की उम्मीद कर रहा हूं जिसके लिए उपयोगकर्ता को पैटर्न को इस तरह से बदलने की आवश्यकता नहीं है। फिर भी आपका धन्यवाद! मैंने आपकी टिप्पणी को दर्शाने के लिए प्रश्न संपादित किया। –
क्यों न केवल कोडपॉइंट '\ x {nnnnnnn}' का उपयोग करें? यही है, अगर रेगेक्स इंजन को यूनिकोड का समर्थन करना चाहिए। आम तौर पर रेगेक्स और लक्ष्य स्ट्रिंग को एक ही एन्कोडिंग का उपयोग करना चाहिए, लेकिन रेगेक्स स्ट्रिंग के भीतर शाब्दिक यूनिकोड वर्णों का उपयोग करना अच्छा नहीं है। यदि इंजन इसका समर्थन करता है, तो यह चार इकाइयों में चार को पढ़ता है, बाइट इकाइयों नहीं। – sln