2011-12-20 9 views
12

私は$paramの文字列を大文字に基づいて$chunksに爆発させることができますか?文字列を大文字で壊しますか?

[A-Z]preg_split()を使用して
$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 

答えて

31

が何をすべき :

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

EDIT
あなたがいない必要配列自体を行う場合は、あなただけを除いて(大文字をpreprendすることができます最初にハイフン(-):

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

demo

+0

私は鉱山を持って前にうーん、JRLは、作業[[先読み](http://www.regular-expressions.info/lookaround.html#lookahead)を提供](http://www.ideone.com/4ux5G):)また、 '$ chucks'と' $ chunks'に気づく – jensgram

+0

私が仮定する正規表現を学ぶ時間。この優雅なソリューションをありがとう! – gremo

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

結果を 'array_shift'する必要もあります。 –

+0

array_shiftは、文が大文字で始まる場合にのみ必要です。小文字で始まる場合はarray_shift()を使用しないでください。 –

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

$string = 'setIfUnmodifiedSince'; 
echo splitAtUpperCase($string); 
関連する問題