如何用间距替换所有大写字母?

ggg*_*ggg 11 php regex

$string = "MaryGoesToSchool";

$expectedoutput = "Mary Goes To School";
Run Code Online (Sandbox Code Playgroud)

Pas*_*TIN 20

这样的事情怎么样:

$string = "MaryGoesToSchool";

$spaced = preg_replace('/([A-Z])/', ' $1', $string);
var_dump($spaced);
Run Code Online (Sandbox Code Playgroud)

这个 :

  • 匹配大写字母
  • 并用空格替换它们中的每一个,以及匹配的内容


这给出了这个输出:

string ' Mary Goes To School' (length=20)
Run Code Online (Sandbox Code Playgroud)


然后你可以使用:

$trimmed = trim($spaced);
var_dump($trimmed);
Run Code Online (Sandbox Code Playgroud)

要删除开头的空间,它会让您:

string 'Mary Goes To School' (length=19)
Run Code Online (Sandbox Code Playgroud)

  • 如果字符串已经有前导空格怎么办? (3认同)

Gum*_*mbo 6

试试这个:

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

\p{…}符号所描述经由字符Unicode字符属性 ; \p{Ll}表示小写字母和\p{Lu}大写字母.

另一种方法是:

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

这里每个大写字母前面只有一个空格,如果它前面有另一个字母.所以MaryHasACat也会奏效.