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.¿Cómo puedo agregar un espacio en cadena con letras mayúsculas, pero mantener las mayúsculas continuas juntas usando PHP y un Regex?
Estas cadenas son ejemplos:
TodayILiveInTheUSAWithSimon USAToday IAmSOOOBored
se convierten en:
Today I Live In The USA With Simon USA Today I Am SOOO Bored
se puede hacer esto, y cómo?
Esta pregunta (Regular expression, split string by capital letter but ignore TLA) parece lograr esto con .net.
solución de trabajo
Aquí está el código completo que utilizo:
$string = 'TodayILiveInTheUSAWithSimon';
$regex = '/(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))/';
$string = preg_replace($regex, ' $1', $string);
Ambos de trabajo de estas expresiones regulares:
/(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))/
/((?<=[a-z])(?=[A-Z])|(?=[A-Z][a-z]))/
El primero es de solución de @ Regexident a continuación, y es muy, muy más rápido que el segundo.
¿Qué métodos de PHP debo usar para lograr esto con esta expresión regular? –
@ T.BrianJones: Eso sería [preg_replace] (http://php.net/manual/en/function.preg-replace.php). – Regexident
Recibo el siguiente error: 'preg_replace(): Compilación fallida: las clases con nombre POSIX solo se admiten dentro de una clase en el desplazamiento 4' cuando ejecuto esto:' echo preg_replace ('((?