2010-07-18 8 views
5

este momento, yo estoy poniendo en práctica esto con una división, rebanada, y la implosión:explosión UpperCasedCamelCase a la sentencia de camello mayusculas en PHP

$exploded = implode(' ',array_slice(preg_split('/(?=[A-Z])/','ThisIsATest'),1)); 
//$exploded = "This Is A Test" 

Prettier versión:

$capital_split = preg_split('/(?=[A-Z])/','ThisIsATest'); 
$blank_first_ignored = array_slice($capital_split,1); 
$exploded = implode(' ',$blank_first_ignored); 

Sin embargo, el problema es cuando tiene una entrada como 'SometimesPDFFilesHappen', que mi implementación interpretaría (incorrectamente) como 'Sometimes P D F Files Happen'.

¿Cómo puedo (simplemente) obtener mi secuencia de comandos para condensar 'P D F' a 'PDF'?

Mi clasificación para cuando debería dividirse sería empezar en la primera capital, y poner fin a uno antes de la última, para dar cabida a la siguiente palabra.

Sí, sé que hay algunas ambigüedades, como en 'ThisIsAPDFTest', que se interpretaría como 'This Is APDF Test'. Sin embargo, no puedo pensar en una forma "inteligente" de evitar esto, por lo que es un compromiso aceptable.

+0

Consulte también: http://stackoverflow.com/questions/3103730/is-there-a-elegant-way-to-parse-a-word-and-add-spaces-before-capital-letters/3103795 # 3103795 –

Respuesta

10
$input = "SomePDFFile"; 

$pass1 = preg_replace("/([a-z])([A-Z])/","\\1 \\2",$input); 
$pass2 = preg_replace("/([A-Z])([A-Z][a-z])/","\\1 \\2",$pass1); 
echo $pass2; 

o, si usted es muy religiosa por tener 1 declaración:

preg_replace("/(([a-z])([A-Z])|([A-Z])([A-Z][a-z]))/","\\2\\4 \\3\\5",$input); 

que es muy feo.

+1

+1 me salvaste al escribir una pregunta y luego recibir una bofetada por un duplicado. – zaf

+0

++; Gracias, esto pasó todas mis pruebas unitarias que otros algoritmos fallaron. Realmente necesito aprender Regex. – Dolph

+0

Añadido una prueba de unidad para mis propios fines, y se sustituye el primer argumento en pass1 con "/ ([a-z]) ([A-Z] [a-z]) /" para evitar "foo" de ser reemplazado con "Fo O". – Dolph

Cuestiones relacionadas