爆炸大写字符的字符串?
问题描述:
郝我可以爆炸$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
答
使用preg_split()
上[A-Z]
应该做的:
function splitAtUpperCase($s) {
return preg_split('/(?=[A-Z])/', $s, -1, PREG_SPLIT_NO_EMPTY);
}
编辑
如果你不需要数组本身,你可以preprend大写字符(除第一个)用连字符(-
):
preg_replace('/(?<!^)([A-Z])/', '-\\1', $param);
(demo)
答
$chunks = preg_split('/(?=[A-Z])/', $string);
+0
还需要'array_shift'结果。 – 2011-12-20 15:00:07
+0
仅当句子以大写字母开头时才需要array_shift ...如果以小写字母开头,请不要array_shift() – 2011-12-20 15:07:49
答
function splitAtUpperCase($string){
return preg_replace('/([a-z0-9])?([A-Z])/','$1-$2',$string);
}
$string = 'setIfUnmodifiedSince';
echo splitAtUpperCase($string);
嗯,JRL提供的[先行](http://www.regular-expressions.info/lookaround.html#lookahead)之前,我有矿[工作](http://www.ideone.com/4ux5G):)另外,请注意'$ chucks'与'$ chunks' – jensgram 2011-12-20 15:03:56
我认为学习正则表达式的时间。感谢这个优雅的解决方案! – gremo 2011-12-20 15:26:40