$string = "MaryGoesToSchool";
$expectedoutput = "Mary Goes To School";
Как насчет чего-то вроде этого:
$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)
Попробуйте это:
$expectedoutput = preg_replace('/(\p{Ll})(\p{Lu})/u', '\1 \2', $string);
Обозначения \ p {...}
описаны символы через Свойства символов Unicode ; \ p {ll}
обозначает строчную букву и \ p {lu}
заглавная буква.
Другой подход был бы этим:
$expectedoutput = preg_replace('/\p{Lu}(?<=\p{L}\p{Lu})/u', ' \0', $string);
Здесь каждая заглавная буква подготовлена только с пространством, если оно предшествует другое письмо. Так что Maryhasacat
также будет работать.
Вот решение для нерегеек, которое я использую для форматирования строки камеры для более читаемого формата:
<?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
?>