2010-02-03 7 views
11

मैं प्रत्येक शब्द को कैपिटल और 1 शब्द में यह गठबंधन करने के लिए, जैसे हैं:क्या यह तेजी से regex कर सकते हैं?

घर = घर के बारे में-हमें
= aboutus

इधर, समारोह मैं इस समय का उपयोग कर सकता है Regex यह बेहतर या अधिक कुशल करते हैं?

public function formatClassName($name) 
{ 
$name = str_replace('-', ' ', $name); 
$name = ucwords($name); 
$name = str_replace(' ', '', $name); 
return $name; 
} 

उत्तर

29

मुझे नहीं लगता कि एक regex शब्द कैपिटल सकते हैं, तो आप अभी भी दो अलग-अलग regexes के लिए होगा, और मैं इस तरह के साधारण मामलों के साथ लगता है, नियमित अभिव्यक्ति overkill (तोपखाने के साथ गिलहरी शिकार लगता है) कर रहे हैं । यह कोड सरल, स्पष्ट और समझने में आसान है। इसे मत देखो! संभवतः और -

+3

रेगेक्स पहले पत्र को कैपिटल कर सकता है, लेकिन आपकी सलाह मृत है, केआईएसएस। – TravisO

+9

जाहिर है, आपने कभी तोपखाने के साथ गिलहरी शिकार नहीं किया है;) –

+0

आप 'preg' के साथ शब्द को कैपिटल कर सकते हैं क्योंकि आप '/ e' ध्वज पास कर सकते हैं और PHP कोड को" प्रतिस्थापन "के रूप में डाल सकते हैं। – kennytm

12
regex के साथ

, तो आप शायद preg_replace_callbackकी तरह, कुछ "जटिल" का उपयोग करना होगा है, जो कम से कम कठिन समझने के लिए अपने कोड होगा (strtoupper या ucwords समारोह लागू करने के लिए सक्षम होने के लिए) धीमा, लेकिन सबसे महत्वपूर्ण बात यह है कि आपका कोड समझना आसान है।

पर विचार करते हुए आपका समाधान बस काम करता है और सरल और आसान है, अगर मैं आपके स्थान पर था, तो शायद मैं इसे रखूंगा।

4

इस कोड काम करता है:

$in = Array("home", "about-us"); 
foreach ($in as $a) { 

    ## this is the line you're looking for 
    $out = preg_replace('/-?\b(.)/e', "strtoupper('$1')", $a); 

    echo "$a = $out<br/>"; 
} 

लेकिन मुझे शक है यह तेजी से है, और मैं अन्य टिप्पणीकर्ताओं कि यह जरूरी बेहतर नहीं है के साथ सहमत हैं। एक बालों वाली regexp के लिए तीन लाइनों को कम करना केवल तभी अच्छा है यदि आप golfing हैं।

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