开发者

how to replace all Uppercase letters with spacing?

开发者 https://www.devze.com 2022-12-15 19:31 出处:网络
$stri开发者_如何学编程ng = \"MaryGoesToSchool\"; $expectedoutput = \"Mary Goes To School\"; What about something like this :
$stri开发者_如何学编程ng = "MaryGoesToSchool";

$expectedoutput = "Mary Goes To School";


What about something like this :

$string = "MaryGoesToSchool";

$spaced = preg_replace('/([A-Z])/', ' $1', $string);
var_dump($spaced);

This :

  • Matches the uppercase letters
  • And replace each one of them by a space, and what was matched


Which gives this output :

string ' Mary Goes To School' (length=20)


And you can then use :

$trimmed = trim($spaced);
var_dump($trimmed);

To remove the space at the beginning, which gets you :

string 'Mary Goes To School' (length=19)


Try this:

$expectedoutput = preg_replace('/(\p{Ll})(\p{Lu})/u', '\1 \2', $string);

The \p{…} notations are describing characters via Unicode character properties; \p{Ll} denotes a lowercase letter and \p{Lu} an uppercase letter.

Another approach would be this:

$expectedoutput = preg_replace('/\p{Lu}(?<=\p{L}\p{Lu})/u', ' \0', $string);

Here every uppercase letter is only prepended with a space if it’s preceded by another letter. So MaryHasACat will also work.


Here is a non-regex solution which i use to format a camelCase string to a more readable format:

<?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
?>


Try:

$string = 'MaryGoesToSchool';
$nStr = preg_replace_callback('/[A-Z]/', function($matches){
    return $matches[0] = ' ' . ucfirst($matches[0]);
}, $string);
echo trim($nStr);
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号