2012-03-30 15 views
6

के साथ स्ट्रिंग से लोअरकेस को कैसे परिवर्तित करें मैं बस इस पर फंस गया और समाधान नहीं ढूंढ पाया। मैं preg_replace का उपयोग कर एक स्ट्रिंग को कम मामले में बदलने की कोशिश करना चाहता हूं। मैं सिर्फ सही regex नहीं बना सकता। कारण यह है कि सामान्य strtolower यूनिकोड वर्णों का समर्थन नहीं करता है। मुझे पता है कि मैं mb_strtolower का उपयोग कर सकता हूं लेकिन यह कार्य काफी धीमा प्रतीत होता है और उनके बगल में सभी के पास एमबी समर्थन नहीं है।preg_replace

कोई सुराग?

सादर, राडेक

संपादित करें: ठीक है, धन्यवाद आपकी मदद के लोगों के लिए बहुत कुछ। मुझे लगता है कि मेरा दृष्टिकोण बिल्कुल सही नहीं था। मुझे लगता है कि इसका उपयोग करना बेहतर होगा: How do I detect non-ASCII characters in a string? और फिर क्रमशः स्ट्रेटोवर या mb_strtolower का उपयोग करते हैं।

+8

मैं कलाकृतियां हूँ लिखने के लिए होगा, क्या आप बनाता है लगता है कि regex वास्तव में mb_strtolower से तेज होगा? –

+0

आप स्ट्रिंगोलर() php फ़ंक्शन का उपयोग निम्न मामले में स्टिंग को कन्वर्ट करने के लिए कर सकते हैं। –

+0

@andreas मुझे यकीन नहीं है। मूल रूप से पहले इसका परीक्षण करना चाहता था। –

उत्तर

5

रेगेक्स अपने आप वर्णों को बदलने में सक्षम नहीं है, यह केवल अपना ऑर्डर बदल सकता है और/या अतिरिक्त वर्ण जोड़ सकता है/उनमें से कुछ को हटा सकता है।

preg_replace_callback या /e ध्वज है, लेकिन वे केवल ज्ञात कार्यों के साथ छेड़छाड़ कर सकते हैं, और इसलिए स्ट्रेटोवर से बेहतर नहीं कर सकते हैं।

यदि आप mb_strolower फ़ंक्शन के अस्तित्व पर भरोसा नहीं कर सकते हैं, तो आपको इसे स्वयं लागू करना होगा।

+0

तो यह मूल रूप से संभव नहीं है? –

+0

हां, यह मूल रूप से संभव नहीं है। रेगेक्स पैटर्न मिलान और स्ट्रिंग पुनर्मूल्यांकन के लिए एक उपकरण है, यह अपने आप को वर्णों को बदल नहीं सकता है। – Nameless

0

आपको इसके लिए preg_replace का उपयोग नहीं करना चाहिए क्योंकि preg_replace का उपयोग किसी निश्चित पैटर्न से मेल खाने के लिए किया जाता है और इसे किसी अन्य चीज़ से प्रतिस्थापित किया जाता है। आप चाहते हैं कि प्रत्येक एकल अपरकेस वर्ण को लोअरकेस एक के साथ प्रतिस्थापित करना है, इसलिए किसी पैटर्न से मिलान करने की आवश्यकता नहीं है।

mb_strtolower जाने का रास्ता हो सकता है, और यदि आप mb_ कार्यों की जरूरत नहीं है आप एक समारोह अपने आप को str_replace के का एक बहुत का उपयोग कर ...

+0

हां लेकिन mb_stratolower बहुत धीमी है। मैंने mb_strlower और देशी strtolower की तुलना करने के लिए कुछ परीक्षण किया और एमबी देशी की तुलना में लगभग 30 गुना धीमा लगता है। मेरी सबसे बड़ी समस्या यह है कि उस समय मुझे स्ट्रेटोलॉवर करना है, मुझे नहीं पता कि मेरे पास स्ट्रिंग के भीतर यूनिकोड वर्ण हैं या नहीं। –

+0

शायद पहले स्ट्रेटोलॉवर का उपयोग करें, फिर preg_replace_callback का उपयोग उन सभी वर्णों को प्रतिस्थापित करने के लिए करें जो डिफ़ॉल्ट लोअरकेस वर्ण (/ [^ az] + /) नहीं हैं और फिर उस – rednaw

+1

के लिए mb_strtolower का उपयोग करें क्योंकि मैं यहां आया क्योंकि मैं "decaptialize" करने का कोई तरीका ढूंढ रहा था स्ट्रिंग (उदाहरण के लिए "नेक्स्टजेन का युद्ध" "" अगले जीन के युद्ध "को" "चालू करें" - इसलिए इस मामले के लिए पूरी स्ट्रिंग को कम करने वाला मेरे लिए काम नहीं करेगा। मैं preg_replace का उपयोग '"/\ b के साथ करने की कोशिश कर रहा था। (\ w)/"' और प्रतिस्थापन स्ट्रिंग को 'strtolower ("$ 1")' - लेकिन यह काम नहीं करता है! निश्चित रूप से एक रास्ता होना चाहिए? –

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