2011-12-23 11 views
12

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.

Respuesta

10

Encontrar:

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

Reemplazar:

$1 

nota del espacio antes $1

Editar: fix.

+0

¿Qué métodos de PHP debo usar para lograr esto con esta expresión regular? –

+0

@ T.BrianJones: Eso sería [preg_replace] (http://php.net/manual/en/function.preg-replace.php). – Regexident

+0

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 ('((?

Cuestiones relacionadas