как заменить все заглавные буквы на пробелы? - PullRequest
11 голосов
/ 10 января 2010
$string = "MaryGoesToSchool";

$expectedoutput = "Mary Goes To School";

Ответы [ 4 ]

20 голосов
/ 10 января 2010

Что-то вроде этого:

$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)
6 голосов
/ 10 января 2010

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

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

1 голос
/ 10 января 2010

Вот решение без регулярных выражений, которое я использую для форматирования строки 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
?>
0 голосов
/ 10 октября 2014

Попробуйте:

$string = 'MaryGoesToSchool';
$nStr = preg_replace_callback('/[A-Z]/', function($matches){
    return $matches[0] = ' ' . ucfirst($matches[0]);
}, $string);
echo trim($nStr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...