在大写字符上分解字符串?

时间:2011-12-20 14:56:07

标签: php string

何我可以根据大写字符将$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

4 个答案:

答案 0 :(得分:35)

[A-Z]上使用preg_split()应该:

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

修改
如果您不需要数组本身,您可以使用连字符(-)预先校正大写字符(第一个除外):

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

demo

答案 1 :(得分:5)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

如果您希望使用情人大小写转换字符串,可以@jensgram的代码,其中我将连字符(-)更改为下划线(_)

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

我一直在寻找。