如何仅在完整的CamelCase单词之间跳过完整的单个大写字母之间在PHP字符串中添加空格?

我需要像这样在字符串中添加空格:
IMACSuperSeriousLabelDCN

具有如下输出:

IMAC超级标签DCN

目前,我已经设法在PHP中使用此代码:

$label = preg_replace('/(?<!\ )[A-Z]/',' $0',$field);

但是它不考虑跳过单个大写字母,所以我得到:
我是超级严重标签D C N

如何跳过在大写字母之间插入空格,而是在大写字母之前紧跟小写字母之间以及在小写字母出现几个大写字母(示例字符串的末尾)之后放置空格?

zdh6189664 回答:如何仅在完整的CamelCase单词之间跳过完整的单个大写字母之间在PHP字符串中添加空格?

一个选项可能是使用2个捕获组,而一个alternation使用branch reset group来共享相同的捕获组

(?|([A-Z])([A-Z][a-z])|([a-z])([A-Z]))
  • (?|分支重置组
    • ([A-Z])捕获第1组,匹配A-Z
    • ([A-Z][a-z])捕获第2组
    • |
    • ([a-z])捕获第1组,匹配a-z
    • ([A-Z])捕获第2组,匹配A-Z
  • )关闭分支重置组

Regex demo

在替换使用中

$1 $2

输出

IMAC Super Serious Label DCN
,

一种方法是检查每个大写字符前面的字符是小写还是下一个字符是小写,如果是,则事先插入一个空格:

$field = "IMACSuperSeriousLabelDCN";
$label = preg_replace('/(?<=[a-z])[A-Z]|[A-Z](?=[a-z])/',' $0',$field);
echo $label . "\n";

输出:

IMAC Super Serious Label DCN

Demo on 3v4l.org

本文链接:https://www.f2er.com/3138392.html

大家都在问