PHP

2013-11-28 2 views
7

में regex का उपयोग करके प्रत्येक शब्द का पहला अक्षर कैसे प्राप्त करें मेरे पास एक स्ट्रिंग चर है और मैं इसके प्रत्येक शब्द का पहला अक्षर प्राप्त करना चाहता हूं। मैं अंतिम परिणाम को पहले अक्षर की सरणी बनाना चाहता हूं।PHP

$language = 'Sample Language'; 
preg_match('/(\b[a-z])+/i', $language, $match); 
print_r($match); 

जो मुझे मिल रहा है वह केवल पहले शब्द का पहला अक्षर है। ऊपर प्रिंट सरणी ([0] => एस [1] => एस)

अगर मैं यह

preg_match('/(\bL)+/i', $language, $match); 

करने के लिए बदल रहा दूसरा शब्द की एल के लिए एक मैच मिल सकता है। तो जाहिर है कि पहले मैच के बाद यह बाकी की तलाश बंद कर देता है। मैं नियमित अभिव्यक्तियों के साथ बहुत अच्छा नहीं हूं। क्या कोई यह बता सकता है कि मैंने क्या गलत किया है?

इनपुट स्ट्रिंग में शब्द हमेशा अंतरिक्ष से अलग नहीं होते हैं। यह काफी अप्रत्याशित है। कुछ प्रारूपों मैं भर में आ गए हैं: "MainLanguage: भाषा" "MainLanguage, भाषा" "MainLanguage: भाषा-प्रांतीय भाषा" यहाँ मैं पाने के लिए एम, एल और एस

+0

मैं अपने सभी अनुरोधों को कवर करने के मेरा उत्तर संपादित किया है। –

+0

यदि आप PHP का उपयोग कर रहे हैं, तो अंतर्निहित फ़ंक्शन का उपयोग क्यों नहीं करते हैं? या प्रत्येक शब्द अक्षर को सरणी के पहले तत्व ($ शब्द [0]) के रूप में एक्सेस करें? यह नमूना अलग-अलग शब्द डिलीमीटरों को भी संभालता है: http://phpfiddle.org/main/code/hnu-qz3 – Andrew

उत्तर

16

सबसे पहले का उपयोग इस के लिए preg_match_all चाहते हैं, और

$language = 'Sample Language'; 
preg_match_all('/\b\w/', $language, $match); 
print_r($match); 
  • \b:: एक शब्द सीमा मेल खाता है, एक शब्द सीमा एक स्थिति यह है कि एक गैर शब्द चरित्र से एक शब्द चरित्र से अलग करती है दूसरी बात आप + परिमाणक जरूरत नहीं है। शब्द वर्ण आमतौर पर [a-zA-Z0-9_] होते हैं।
  • \w: एक शब्द चरित्र से मेल खाता है।
  • \b\w एक शब्द सीमा से मेल खाता शब्द शब्द मिलान करता है, इस मामले में अंतरिक्ष या स्टार्ट-ऑफ-स्ट्रिंग के बाद शब्दों को अलग करता है।

    \b\w|(?<=\p{Ll})\p{Lu} 
    

    अभिव्यक्ति के दूसरे भाग, अर्थात् (?<=\w)\p{Lu} किसी भी शब्द चरित्र से मेल खाना चाहिए अगर यह होता है:

मामले में आप ऊंट मामले स्थितियों तो आप इस तरह एक दूसरे के साथ पिछले अभिव्यक्ति गठजोड़ कर सकते हैं चाहता हूँ लोअरकेस एक \p{Ll} के बाद एक अपरकेस वर्ण \p{Lu} जो ऊंट मामले की स्थिति को कवर करना चाहिए, मूल अभिव्यक्ति स्थिति को कवर करती है जब एक हाइफ़न - दो शब्दों को अलग करने के लिए उपयोग किया जाता है।

Regex101 Demo

0

आप इस प्रयास कर सकते हैं,

$language = 'Sample Language'; 

    $language = explode(" ", $language); 

    foreach ($language as $value) { 
     echo $firstLetter = $value[0]; 
    } 
संबंधित मुद्दे