Скажем, у меня есть следующая строка:
getPasswordLastChangedDatetime
Как бы я мог разбить это заглавными буквами, чтобы я мог получить:
get Password Last Changed Datetime
Если вас интересуют только символы ASCII:
$parts = preg_split("/(?=[AZ])/", $str);
DEMO
Конструкция (?= ..)
называется lookahead [docs] .
Это работает, если части только содержат характер капитала в начале. Это становится более сложным, если у вас есть такие вещи, как getHTMLString
. Это можно сравнить с:
$parts = preg_split("/((?<=[az])(?=[AZ])|(?=[AZ][az]))/", $str);
DEMO
Спрашивая это слишком рано, нашла это:
preg_replace('/(?!^)[[:upper:]]/',' \0',$test);
Например:
(?:^|\p{Lu})\P{Lu}*
Нет необходимости в сложном решении. Это делает это
preg_replace('/([AZ])/',"\n".'$1',$string);
Это, конечно, не позаботится об акронимах
Используйте это: [az]+|[AZ][az]*
или \p{Ll}+|\p{Lu}\p{Ll}*
preg_split("/(?<=[az])(?=[AZ])/",$password));
preg_split('@(?=[AZ])@', 'asAs')