2010-02-03 24 views
11

Ben mesela, her kelimeyi büyük harfle ve 1 kelime haline birleştirmek istiyorum: yaklaşık-usRegex bunu daha hızlı yapabilir mi?

ev = Evde
= aboutus İşte

can, ben şu anda kullanmak fonksiyonudur regex bunu daha iyi veya daha verimli yapar mı?

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

cevap

29

ben regex sözcükler büyük harfle sanmıyorum, bu yüzden yine iki ayrı Regexes sahip olurdu ve böyle basit vakalarla düşünüyorum düzenli ifadeler overkill (topçu sincap avcılık düşünmek) vardır . Bu kod basit, açık ve anlaşılması kolay. BUNU DOKUNMAYIN! regex ile

+3

RegEx ilk harfi büyük yazabilir, ancak tavsiyeniz bitti, KISS. – TravisO

+9

Açıkçası, hiçbir zaman topçuyla sincap avlamıyorsun;) –

+0

'/ e 'işaretini geçebileceğinden ve PHP kodunu" yedek "olarak atabildiğinizden, kelimeyi' preg' ile büyük harfle yazabilirsiniz. – kennytm

12

, muhtemelen preg_replace_callbackgibi bir şey "karmaşık" kullanmak zorunda en azından zor anlamak kodunuzu yapacak, (strtoupper veya ucwords fonksiyonunu uygulamak mümkün) - ve muhtemelen Daha yavaş, ama en önemli şey, kodunuzun anlaşılması kolay olmasıdır.

çözümünüz göz önünde bulundurulduğunda sadece işe yarar ve kolay ve kolay, eğer yerinde olsaydım, muhtemelen tutardım.

$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/>"; 
} 

Ama daha hızlı şüpheliyim, ve bunun ille daha iyi olmadığını, diğer commenters ile kabul:

4

Bu kod çalışır. Bir kıllı regexp için üç satır azaltmak yalnızca golfing iseniz iyi olur.

İlgili konular