function splitAtUpperCase($string){
return preg_replace('/([a-z0-9])?([A-Z])/','$1 $2',$string);
}
$string = 'setIfUnmodifiedSince';
echo splitAtUpperCase($string);
输出为“如果未修改,则设置”。但我需要进行一些修改:
- 当字符串中存在这些字符
ÇÖĞŞÜİ
时,该代码片段无法处理。我不想转换这些字符。否则就会失去单词的意义。我需要使用一些UTF字符。该代码使“HereÇonThen”变成“HereÇon Then”。
- 我也不想拆分大写缩写。如果单词是“IKnowYouWillComeASAPHere”,我需要将其转换为“I Know You Will Come ASAP Here”。
- 如果所有字母都是大写字母,请不要分隔。比如“DONTCOMEHERE”。
- 也要分隔数字值。“Before2013ends” 变成“Before 2013 ends”。
- 如果第一个字符是哈希键(#),请分隔。案例和期望结果。
- "comeHEREtomorrow" => "come HERE tomorrow"
- "KissYouTODAY" => "kiss you TODAY"
- "comeÜndeHere" => "come Ünde Here"
- "NEVERSAYIT" => "NEVERSAYIT"
- "2013willCome" => "2013 will Come"
- "Before2013ends" => "Before 2013 ends"
- "IKnowThat" => "I Know That"
- "#whatiknow" => "# whatiknow"
对于这些情况,我使用了连续的str_replace
操作。 我寻找一种简短的解决方案,不需要太多循环来检查单词。 如果可能的话,最好将其作为preg_replace
等。
编辑:任何人都可以通过更改此PHP fiddle中的convert
函数来尝试自己的解决方案:http://ideone.com/9gajZ8
I
在IKnow
中是一个不同的单词?这是不可能的。对于ASAPHere
也是一样。 - Shiplu MokaddimJScript
分割成J Script
吗? - Shiplu MokaddimHEREtomorrow
拆分为HERE tomorrow
,并将IKnow
拆分为I Know
而不是IK now
? - Shiplu Mokaddim