Как добавить пробел в строку заглавными буквами, но сохранить непрерывные капиталы вместе с помощью PHP и Regex?

Я хочу добавить пробел в строку заглавными буквами, используя PHP-метод, такой как preg_replace() и регулярное выражение, но я хочу только добавить пробел в первую заглавную букву, когда они будут непрерывными. Я также хотел бы, чтобы регулярное выражение узнало, что последняя столица в непрерывной цепочке капиталов должна стать следующей столицей, чтобы положить пространство раньше.

Эти строки являются примерами:

 TodayILiveInTheUSAWithSimon
 USAToday
 IAmSOOOBored

стали:

  Сегодня я живу в США с Саймоном
  США сегодня
  Я СООО скучаю

Можно ли это сделать и как?

Этот вопрос ( регулярное выражение, разделение строки заглавной буквой, но игнорирование TLA ), похоже, выполняется с помощью .net.

РАБОЧИЙ РЕШЕНИЕ

Вот полный код, который я использую:

 $string = 'TodayILiveInTheUSAWithSimon'; $regex = '/(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))/'; $string = preg_replace( $regex, ' $1', $string ); 

Обе эти регулярные выражения:

 /(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))/ /((?<=[az])(?=[AZ])|(?=[AZ][az]))/ 

Первый из решений @ Regexident ниже и очень немного быстрее второго.

Найти:

 (?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]])) 

Заменить:

  $1 

обратите внимание на пространство до $1

Изменить: исправить.