$string = "MaryGoesToSchool";
$expectedoutput = "Mary Goes To School";
答案 0 :(得分:20)
这样的事情:
$string = "MaryGoesToSchool";
$spaced = preg_replace('/([A-Z])/', ' $1', $string);
var_dump($spaced);
这:
这给出了这个输出:
string ' Mary Goes To School' (length=20)
然后你可以使用:
$trimmed = trim($spaced);
var_dump($trimmed);
要删除开头的空格,可以获得:
string 'Mary Goes To School' (length=19)
答案 1 :(得分:6)
试试这个:
$expectedoutput = preg_replace('/(\p{Ll})(\p{Lu})/u', '\1 \2', $string);
\p{…}
符号通过Unicode character properties描述字符; \p{Ll}
表示小写字母,\p{Lu}
表示大写字母。
另一种方法是:
$expectedoutput = preg_replace('/\p{Lu}(?<=\p{L}\p{Lu})/u', ' \0', $string);
这里每个大写字母前面只有一个空格,如果它前面有另一个字母。所以MaryHasACat
也可以。
答案 2 :(得分:1)
这是一个非正则表达式解决方案,我用它来将camelCase字符串格式化为更易读的格式:
<?php
function formatCamelCase( $string ) {
$output = "";
foreach( str_split( $string ) as $char ) {
strtoupper( $char ) == $char and $output and $output .= " ";
$output .= $char;
}
return $output;
}
echo formatCamelCase("MaryGoesToSchool"); // Mary Goes To School
echo formatCamelCase("MaryHasACat"); // Mary Has A Cat
?>
答案 3 :(得分:0)
尝试:
$string = 'MaryGoesToSchool';
$nStr = preg_replace_callback('/[A-Z]/', function($matches){
return $matches[0] = ' ' . ucfirst($matches[0]);
}, $string);
echo trim($nStr);