2013-02-27 75 views
9

我發現了這個類似的問題,但它不回答我的問題Split word by capital letter在PHP中以大寫字母拆分?

我有一個字符串,它是camel case。我想在下面的每個大寫字母上打破這個字符串。

$str = 'CamelCase'; // array('Camel', 'Case'); 

我有這麼遠:

$parts = preg_split('/(?=[A-Z])/', 'CamelCase'); 

但結果數組總是在一開始的空值結束了! $parts看起來像這樣

$parts = array('', 'Camel', 'Case'); 

如何擺脫數組開頭處的空值?

回答

14

可以使用PREG_SPLIT_NO_EMPTY標誌是這樣的:

$parts = preg_split('/(?=[A-Z])/', 'CamelCase', -1, PREG_SPLIT_NO_EMPTY); 

documentation for preg_split

2

濾鏡陣列可用於刪除所有空值:

$parts = array_filter($parts, 'strlen'); 
+1

他想要生成正確的數組,而不是修復損壞的數組。 – Will 2013-02-27 23:40:40

+1

鑑於卡拉的回答,這不是最好的答案,但在我的辯護中,提問人員特別提出「我怎樣才能擺脫陣列開始時的空值?」 – Jim 2013-02-28 00:12:28

3

你需要一個正回顧後。試試這個:

$parts = preg_split('/(?<=\\w)(?=[A-Z])/', 'CamelCase') 

array(2) { 
    [0]=> 
    string(5) "Camel" 
    [1]=> 
    string(4) "Case" 
} 
+1

不錯的做法,但@Kara贏得它,雖然與他,謝謝! – ShaShads 2013-02-27 23:41:40

+0

似乎不適用'C CamelCase',如果可能有空格,可能需要調整。 – 2013-02-27 23:41:46

+0

@Wesley,空格不是在原來的要求,但是這會工作:使preg_split( '?/(?:(<= \\瓦特)(= [A-Z])|)/', 'C駝峯') – Will 2013-02-28 00:07:19