$string = "MaryGoesToSchool";
$expectedoutput = "Mary Goes To School";
Как заменить все прописные буквы интервалом?
Ответ 1
Что-то вроде этого:
$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)
Ответ 2
Попробуйте следующее:
$expectedoutput = preg_replace('/(\p{Ll})(\p{Lu})/u', '\1 \2', $string);
Обозначения \p{…}
описывают символы через свойства символа Юникода; \p{Ll}
обозначает строчную букву и \p{Lu}
прописную букву.
Другим подходом было бы следующее:
$expectedoutput = preg_replace('/\p{Lu}(?<=\p{L}\p{Lu})/u', ' \0', $string);
Здесь каждая прописная буква только добавляется с пробелом, если ей предшествует другая буква. Таким образом, MaryHasACat
также будет работать.
Ответ 3
Вот решение без регулярного выражения, которое я использую для форматирования строки 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
?>
Ответ 4
Try:
$string = 'MaryGoesToSchool';
$nStr = preg_replace_callback('/[A-Z]/', function($matches){
return $matches[0] = ' ' . ucfirst($matches[0]);
}, $string);
echo trim($nStr);
Ответ 5
$string = 'ThisIsATest';
$string = str_replace('/([A-Z])/', ' [A-Z]', $string);
echo $string;
//returns "This Is A Test"