¿Cómo puedo agregar un espacio en una cadena con letras mayúsculas, pero mantener las mayúsculas continuas juntas usando PHP y un Regex?

Quiero agregar un espacio a una cadena en letras mayúsculas usando un método PHP como preg_replace() y una expresión regular, pero solo quiero agregar un espacio en la primera letra mayúscula cuando son continuas. También me gustaría que la expresión regular sepa que el último capital en una cadena continua de capitales debería ser el próximo capital para poner un espacio antes.

Estas cadenas son ejemplos:

 TodayILiveInTheUSAConSimon
 EE.UU. Hoy en día
 IAmSOOOBored

volverse:

  Hoy vivo en los Estados Unidos con Simon
  EE.UU. Hoy en día
  Estoy tan aburrido

¿Se puede hacer esto, y cómo?

Esta pregunta ( expresión regular, cadena dividida por mayúscula pero ignorar TLA ) parece lograr esto con .net.

SOLUCIÓN DE TRABAJO

Aquí está el código completo que uso:

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

Ambos trabajos de expresiones regulares:

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

El primero es de la solución de @Regexident a continuación, y es muy, muy más rápido que el segundo.

Encontrar:

 (? 

Reemplazar:

  $1 

tenga en cuenta el espacio antes de $1

Editar: corregir.