Php在字符串前面放一个空格(正则表达式)

Pau*_*l M 34 php regex

我有许多字符串,其中包含聚集在一起的单词,我需要将它们分开.

例如ThisWasCool - 这很酷
MyHomeIsHere - 我的家就在这里

我正慢慢地了解正则表达式,我相信这样做我应该使用preg_replace.我的问题是将表达式放在一起以找到匹配.

我只有这么远

   preg_replace('~^[A-Z]~', " ", $string)
Run Code Online (Sandbox Code Playgroud)

每个字符串包含很多单词,但只有第一个单词包含成束单词,所以使用我上面的字符串中的例子将是
"ThisWasCool再次访问你" - "这很酷,再次访问你"

我已经告诉它从头开始,并寻找大写字母,但我不知道该怎么做 - 只限于每个字符串的第一个字 - 如何在空格后重新使用大写字母

mat*_*pie 69

问题

  1. 你的正则表达式'~^[A-Z]~'只匹配第一个大写字母.查看模式语法中的元字符以获取更多信息.

  2. 您的替换是换行符,'\n'而不是空格.

使用此代码:

$String = 'ThisWasCool';
$Words = preg_replace('/(?<!\ )[A-Z]/', ' $0', $String);
Run Code Online (Sandbox Code Playgroud)

(?<!\ )是一个断言,它将确保我们不会在已经有空格的大写字母之前添加空格.

  • 并且,如果您需要一个不分隔顺序大写的(例如,BusinessUnitID应该是业务单位ID,而不是业务单位ID),那么您可以使用/(?<!)(?<!^)(?<! [AZ])[AZ] / (15认同)
  • 我知道了:preg_replace('/(?<!)(?<!^)[AZ] /','$ 0',$ String); (9认同)

Ale*_*ett 13

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

也许之后通过ltrim运行结果.

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