私は固執しています - ここではたくさんの回答を見てきましたが、最後の問題は解決しないようです。略語を省略してPHPで読むことができるように書式を設定する
JSONのAPIを使用して、キャメルケース形式の機器リストを受け取ります。私はそれを変えることはできません。
私はこのキャメルケースは、通常の言語に翻訳する必要がある -
これまでのところ、私が得ているほとんどの言葉は通じ区切ら:
$string = "SomeEquipmentHere";
$spaced = preg_replace('/([A-Z])/', ' $1', $string);
var_dump($spaced);
string ' Some Equipment Here' (length=20)
$trimmed = trim($spaced);
var_dump($trimmed);
string 'Some Equipment Here' (length=19)
正常に動作している - しかし、機器の一部に省略形で構成されてい
「ABSBrakes」 - これが必要となるABSとブレーキ
私はEACの隣にあるいくつかの大文字のためにチェックすることはできませんから分離それはその後、ABSとブレーキを一緒に保持しますので、他の時間 - つまり、より多くのこれらのようにあります:「CDRadio」
だから出力がためにされて欲しいものです:
"ABS Brakes"
はフォーマットする方法がありますそれで、大文字が隣にある場合は、そのシーケンスの最後の大文字の前にスペースを追加するだけですか?
私は正規表現では強くありません。
どちらの貢献は素晴らしいです
EDIT - 後でここに来る人は、両方の答えに
を読むべき構成されていた最後の問題は、次のパターンです:
「ServiceOKは、」「サービスOK」となり
"ESP"が "ES P"になる
パターン純粋な大文字の略語のみで構成され、小文字の文字をカウントする関数で固定されています。存在しない場合は、preg_replace()をスキップします。
しかし、フライングは彼の答えのコメントに書いているように、潜在的に彼の正規表現でカバーされていないインスタンスがたくさんある可能性があり、答えが不可能である可能性があります - これは正規表現。
おそらくルール「大文字の後に小文字がない場合は、スペースが挿入されてはならない」いくつかを追加することにより
ここ
すべての深刻なAPIは、識別子(数値またはキャメルケースオブジェクト名)と「表示名」を送信する必要があります。回避策の他に、APIの所有者に連絡して、不足している情報を入力するように依頼します。 – DanFromGermany
@DanFromGermanyこれは本当です...しかし、彼らからのアクセスを得るのにおよそ1週間かかりましたので、いつでもすぐに修正されるのではないかと疑います。 – Stender