how to replace all Uppercase letters with spacing?

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.

Tags:

Php

Regex