2010-08-06 62 views

回答

3

如果第一個單詞是大寫的,你會關心嗎?如果沒有,

// ASCII 
preg_replace('/([a-z])([A-Z])/', '$1 $2', $string) 
preg_replace('/([[:lower:]])([[:upper:]])/', '$1 $2', $string) 

// Unicode (UTF-8) 
preg_replace('/(\p{Ll})(\p{Lu})/u', '$1 $2', $string) 

如果你做護理,想自己單獨修理KitnerCostner但留下kitnerCostner,然後做

// ASCII 
preg_replace('/\b([A-Z]\S*[a-z])([A-Z])/', '$1 $2', $string) 
preg_replace('/\b([[:upper:]]\S*[[:lower:]])([[:upper:]])/', '$1 $2', $string) 

// Unicode (UTF-8) 
preg_replace('/\b(\p{Lu}\S*\p{Ll})(\p{Lu})/u', '$1 $2', $string) 

我給的版本是隻匹配ASCII字符和名稱相符all Unicode characters這。 Unicode的可用於PHP 5.1.0。

4

使用正則表達式,你可以做類似

s/([a-z])([A-Z])/'$1 $2'/g 

但是我一審寫一個正則表達式通常會失敗,所以你可能要糾正一個或另一個部分。

你想如何處理1個字符的單詞?像FooXBar中的'X'一樣?上述正則表達式不會將X識別爲單獨的單詞。

+0

+1,因爲我也很痛心地寫出一個適用於第一次試驗的正則表達式。 – 2010-08-06 13:57:17

+0

將其更改爲preg_compatible正則表達式(解決方案很好,但問題與PHP有關):'preg_replace('/([az])([AZ])/','$ 1 $ 2',$ string);'。 .. – ircmaxell 2010-08-06 13:58:58

相關問題