2011-12-20 16 views
12

¿Puedo explotar $param cadena en $chunks piezas basadas en caracteres en mayúscula?Explotar una cadena en mayúsculas y minúsculas?

$string = 'setIfUnmodifiedSince'; 
$method = substr($string, 0, 3); 
$param = substr($string, 3); 

// Split $param and implode with '-' separator 
$chunks = splitAtUpperCase($param); // Chunks are: 'If', 'Unmodified' and 'Since' 
$field = implode('-', $chunks); // Get If-Unmodified-Since HTTP field name 

Respuesta

31

Usando preg_split() en [A-Z] debe hacer:

function splitAtUpperCase($s) { 
     return preg_split('/(?=[A-Z])/', $s, -1, PREG_SPLIT_NO_EMPTY); 
} 

EDITAR
Si no lo necesitan la matriz en sí, sólo puede antepóngale caracteres en mayúsculas (excepto el primero) con un guion (-):

preg_replace('/(?<!^)([A-Z])/', '-\\1', $param); 

(demo)

+0

Hmm, JRL siempre que el [lookahead] (http://www.regular-expressions.info/lookaround.html#lookahead) antes de que yo tengo la mía [de trabajo ] (http://www.ideone.com/4ux5G) :) Además, observe '$ chucks' contra' $ chunks' – jensgram

+0

Es hora de aprender la expresión regular, supongo. Gracias por esta elegante solución! – gremo

5
$chunks = preg_split('/(?=[A-Z])/', $string); 
+0

También es necesario 'array_shift' el resultado. –

+0

array_shift solo es necesario si la oración comienza con una mayúscula ... si comienza con una minúscula, no array_shift() –

0
function splitAtUpperCase($string){ 
    return preg_replace('/([a-z0-9])?([A-Z])/','$1-$2',$string); 
} 

$string = 'setIfUnmodifiedSince'; 
echo splitAtUpperCase($string); 
Cuestiones relacionadas