Как заменить все прописные буквы интервалом?

$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"