Я полагаю, что вы будете sh разбивать строку на части, где точки разрыва - это позиции нулевой ширины, которые непосредственно предшествуют заглавной букве и не следуют за заглавной буквой. Если это так, вы можете использовать следующее регулярное выражение.
(?=(?<![A-Z]|^)[A-Z])
Regex demo
Может быть выполнено следующим образом:
<?php
$result = preg_split("/(?=(?<![A-Z]|^)[A-Z])/", "now is THE time to BE brave");
print_r($result);
PHP demo
Как показано по ссылке, это возвращает
Array
(
[0] => now is
[1] => THE time to
[2] => BE brave
)
Если первое слово строки было написано с большой буквы ("Now"
), первый элемент строки будет "Now is"
(т. е. не пустая строка "). Механизм регулярных выражений
PHP выполняет следующие операции.
(?= # begin a positive lookahead
(?<! # begin a negative lookbehind
[A-Z] # match a capital letter
| # or
^ # match the beginning of the line
) # end the negative lookbehind
[A-Z] # match a capital letter
) # end positive lookahead
Эта попытка сопоставить заглавная буква в положительном заглядывании ([A-Z]
), но это совпадение не выполняется, если отрицательный заглавный знак соответствует заглавной букве, предшествующей ему, или заглавная буква находится в начале строки.