2010-01-10 13 views
9
$string = "MaryGoesToSchool"; 

$expectedoutput = "Mary Goes To School"; 
+0

Cómo espera la salida de "MaryHasACat"? –

Respuesta

17

¿Qué pasa algo como esto:

$string = "MaryGoesToSchool"; 

$spaced = preg_replace('/([A-Z])/', ' $1', $string); 
var_dump($spaced); 

Este:

  • corresponda a las letras mayúsculas
  • y vuelva a colocar cada uno de ellos por un espacio, y lo que se igualaron


Lo que da esta salida:

string ' Mary Goes To School' (length=20) 


Y a continuación, puede utilizar:

$trimmed = trim($spaced); 
var_dump($trimmed); 

Para quitar el espacio al principio, que obtiene que:

string 'Mary Goes To School' (length=19) 
+3

¿Qué pasa si la cadena ya tiene espacios en blanco? – Gumbo

+0

Luego 'preg_replace ('/ * ([A-Z]) /', '$ 1', $ string);'. – kennytm

6

Prueba esto:

$expectedoutput = preg_replace('/(\p{Ll})(\p{Lu})/u', '\1 \2', $string); 

Las notaciones \p{…} están describiendo personajes a través de Unicode character properties; \p{Ll} denota una letra minúscula y \p{Lu} una letra mayúscula.

Otro enfoque sería la siguiente:

$expectedoutput = preg_replace('/\p{Lu}(?<=\p{L}\p{Lu})/u', ' \0', $string); 

Aquí cada letra mayúscula solamente se antepone con un espacio si está precedida por otra carta. Entonces, MaryHasACat también funcionará.

1

Aquí es una solución no expresiones regulares que me utilizar para formatear una cadena camelCase a un formato más legible:

<?php 
function formatCamelCase($string) { 
     $output = ""; 
     foreach(str_split($string) as $char) { 
       strtoupper($char) == $char and $output and $output .= " "; 
       $output .= $char; 
     } 
     return $output; 
} 

echo formatCamelCase("MaryGoesToSchool"); // Mary Goes To School 
echo formatCamelCase("MaryHasACat"); // Mary Has A Cat 
?> 
+0

Downvoter - ¿por qué? – alexn

0

Probar:

$string = 'MaryGoesToSchool'; 
$nStr = preg_replace_callback('/[A-Z]/', function($matches){ 
    return $matches[0] = ' ' . ucfirst($matches[0]); 
}, $string); 
echo trim($nStr); 
Cuestiones relacionadas