2011-12-20 2 views
12

$param에 문자열을 넣을 수 있습니다 $chunks 대문자 기준으로 문자열을?대문자로 된 문자열을 분해 하시겠습니까?

$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

[A-Z]preg_split()이해야 사용 :

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

편집
을 그렇게하지 않으면 는 제외 (배열 자체가, 당신은 단지 대문자를 preprend 수 필요 첫 번째) 하이픈 (-) :

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

(demo)

+0

흠은 JRL는 [룩어]를 제공 (http://www.regular-expressions.info/lookaround.html#lookahead) I 내있어 전에 [작동 ] (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); 
관련 문제