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

$string = "MaryGoesToSchool";

$expectedoutput = "Mary Goes To School";
11
задан ggggggggg 10 January 2010 в 10:44
поделиться

3 ответа

Как насчет чего-то вроде этого:

$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)
20
ответ дан 3 December 2019 в 03:35
поделиться

Попробуйте это:

$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 также будет работать.

6
ответ дан 3 December 2019 в 03:35
поделиться

Вот решение для нерегеек, которое я использую для форматирования строки камеры для более читаемого формата:

<?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
?>
1
ответ дан 3 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: