作为这个问题,我可以拆分包含大写的字符串,如下所示:
function splitAtUpperCase($string){
return preg_replace('/([a-z0-9])?([A-Z])/','$1 $2',$string);
}
$string = 'setIfUnmodifiedSince';
echo splitAtUpperCase($string);
输出为“如果未修改则设置”
但我需要一些修改:
- 当这些字符存在于 string: 中时,该代码片段不处理这些情况
ÇÖĞŞÜİ
。我不想音译字符。然后我失去了词的意义。我需要使用一些 UTF 字符。该代码使“HereÇonThen”变为“HereÇon Then” - 我也不想拆分大写缩写。如果单词是“IKnowYouWillComeASAPHere”,我需要将其转换为“I Know You Will Come ASAP Here”
- 如果所有字母都是大写,则不要爆炸。就像“不要来这里”
- 也分解数值。“2013 年结束前”到“2013 年结束前”
- 如果第一个字符是哈希键 (#),则展开。
案例和预期结果
- "comeHEREtomorrow" => "明天来这里"
- "KissYouTODAY" => "今天吻你"
- "comeÜndeHere" => "来ÜndeHere"
- “从不说” => “从不说”
- "2013willCome" => "2013 即将到来"
- "2013 年结束前" => "2013 年结束前"
- “我知道” => “我知道”
- "#whatiknow" => "#whatiknow"
对于这些情况,我使用后续str_replace
操作。我寻找一个简短的解决方案,它不会使循环检查单词过多。如果可能的话,最好将它作为preg_replace
或等等。
编辑:任何人都可以通过更改convert
这个 PHP 小提琴中的函数来尝试他的解决方案:http: //ideone.com/9gajZ8