2016-05-12 57 views
-1

我有一個駱駝大小的負載標籤。一些例子是根據條件爲字符串添加空間

whatData 
whoData 
deliveryDate 
importantQuestions 

我想要做的是這樣的。任何包含單詞Data的標籤都需要刪除該單詞。在大寫字母的位置,我需要提供一個空間。最後,一切都應該是大寫。我也做了刪除數據,並通過這樣的大寫字母($數據 - >關鍵是標籤)

strtoupper(str_replace('Data', '', $data->key)) 

我與添加單詞之間的空格掙扎的一部分。所以基本上上面的話應該這樣結束

WHAT 
WHO 
DELIVERY DATE 
IMPORTANT QUESTIONS 

我該如何考慮這個的最後部分?

謝謝

+0

可能的重複http://stackoverflow.com/q/4519739/4323504 –

回答

4

它會在每個大寫字母前加空格。試試這個:

$String = 'whatData'; 
$Words = preg_replace('/(?<!\)[A-Z]/', ' $0', $String); 
3

問題

  • 你的正則表達式'~^[A-Z]~'只會匹配的第一個大寫字母。查看模式語法中的元字符以獲取更多信息。
  • 您的替代品是換行符'\n'而不是空格。

解決方案

使用preg_replace()。嘗試下面的代碼。

$string = "whatData"; 
echo preg_replace('/(?<!\)[A-Z]/', ' $0', $string); 

輸出

what Data 
0

嘗試以下操作:

$string = 'importantQuestions'; 
$string = strtoupper(ltrim(preg_replace('/[A-Z]/', ' $0', $string))); 
echo $string;  

這會給你輸出:

重要問題的

0

試試這個:

preg_split: split on camel case 
array_map: UPPER case all the element 
implode:  Implode the array 
str_replace: Replace the `DATE` with empty 
trim:  trim the white spaces. 

做這個簡單的事情:

echo trim(str_replace("DATE", "", implode(" ", array_map("strtoupper", preg_split('/(?=[A-Z])/', 'deliveryDate', -1, PREG_SPLIT_NO_EMPTY))))); // DELIVERY 

這結果正是你想要的。