この質問として、次のように大文字を含む文字列を分割できます。
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年が終わる前」
- 最初の文字がハッシュ キー (#) の場合は展開します。
ケースと期待される結果
- 「明日ここに来る」 => 「明日ここに来る」
- "KissYouTODAY" => "Kiss you TODAY"
- "comeÜndeHere" => "comeÜndeHere"
- "決して言わない" => "決して言わない"
- "2013willCome" => "2013 will come"
- 「2013 年末まで」 => 「2013 年末まで」
- "IKnowThat" => "私はそれを知っている"
- "#whatiknow" => "#whatiknow"
これらの場合、後続のstr_replace
操作を使用します。ループが単語をチェックするのにあまり効果がない短い解決策を探します。できればaspreg_replace
やetc.の方がいいですね。
convert
編集:この PHP フィドル内の関数を変更することで、誰でも彼のソリューションを試すことができます: http://ideone.com/9gajZ8