我卡住了 - 我在这里看了很多答案,但似乎没有解决我的最后一个问题。
通过JSON API,我以camelcase格式接收到设备列表。我无法更改它。
我需要将这个camelcase转换成普通语言 -
到目前为止,我已经通过以下方式分割了大多数单词:
$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 与 Brakes 分开来。
我不能检查连续几个大写字母,因为这样会将 ABS 和 Brakes 连在一起 - 还有更多类似的,比如:"CDRadio"。
所以我想要的输出结果是:
"ABS Brakes"
有没有一种方法可以格式化它,使得如果相邻的字母都是大写,则只在该序列的最后一个大写字母之前添加一个空格?
我不擅长正则表达式。
编辑
两种解决方案都很棒——以后来到这里的人应该阅读两个答案。
最后需要解决的问题是以下模式:
"ServiceOK" 变成 "Service O K"
"ESP" 变成 "ES P"
仅由纯大写缩写组成的模式通过计算小写字母的函数进行修复,如果没有小写字母,则会跳过 preg_replace()。
但是,正如 Flying 在他的答案评论中所写,他的正则表达式可能无法覆盖许多实例,答案可能是不可能的——我不知道这是否对正则表达式构成了挑战。
可能通过添加一些“如果大写字母后面没有小写字母,则不应插入空格”的规则来解决。