आप बस /u
संशोधक जोड़ने, तो पैटर्न utf-8
रूप में व्यवहार किया जाता है। दूसरे उदाहरण काम करता है क्योंकि:
- पीएचपी 5.1 के बाद से, आप
\p{L}
के रूप में अनुवाद किया जा सकता है कि उपयोग कर सकते हैं: "किसी भी भाषा से पत्र के किसी भी प्रकार है।"
- मानक नोटेशन के अलावा, \ p {एल}, जावा, पर्ल, पीसीआरई और अब PHP आपको शॉर्टेंड
\pL
का उपयोग करने की अनुमति देता है। शॉर्टेंड केवल सिंगल-लेटर यूनिकोड गुणों के साथ काम करता है।
अद्यतन: क्यों preg_replace('/(?=.)/u', '!', 'آرد'); //returns '!�!�!�!�!�!�'??
@MarkFox कहते हैं, कारण यह है preg_replace()
के संदर्भ में यह चरित्र प्रति एक बाइट और वर्ण आप "RegExing" कर रहे हैं मान लिया गया है multibyte हैं । यही कारण है कि आपके प्रतिस्थापन आउटपुट में आपके द्वारा अपेक्षित मिलानों को दोगुना कर दिया गया है, यह प्रत्येक वर्ण के प्रत्येक बाइट से मेल खाता है (जो मुझे दो बाइट्स होने का अनुमान है) -
कोई फर्क नहीं पड़ता कि आप अपने दस्तावेज़ एन्कोडिंग के साथ क्या करते हैं, आपको उपयोग करने की आवश्यकता होगी यह काम करने के लिए Unicode character properties।
उस अजीब प्रतीक के बारे में क्या?
जब आप देखते हैं कि "अंदर एक प्रश्न चिह्न के साथ अजीब वर्ग प्रतीक" अन्यथा प्रतिस्थापन चरित्र के रूप में जाना जाता है, जो आम तौर पर एक संकेतक है कि आपके पास 80-एफएफ (128-255) की सीमा में बाइट है और सिस्टम UTF-8
में इसे प्रस्तुत करने का प्रयास कर रहा है।
कि पूरे बाइट-रेंज UTF-8
में एकल-बाइट वर्णों के लिए अमान्य है, लेकिन ISO-8859-1
जैसे पश्चिमी एन्कोडिंग में सभी बहुत आम हैं।
स्रोत
2013-02-18 08:25:40
क्या @ PHP संस्करण में क्या करता है? यह भी "/(?=.)/" नहीं होना चाहिए? वास्तव में पूछना क्योंकि मैंने पहले यह नहीं देखा है। – kufudo
'@' अमान्य डिलीमीटर है। [PHP] जांचें (http://www.php.net/manual/en/regexp.reference.delimiters.php) का डिलीमीटर पृष्ठ। – hjpotter92
@BackinaFlash यह मान्य है! – PHPst