Php 在字符串中大写字母前面放一个空格 (Regex)

2022-08-30 12:34:46

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

例如 ThisWasCool - This Was Cool
MyHomeIsHere - My Home Is Here

我慢慢地开始我的正则表达式,我相信要做到这一点,我应该使用preg_replace。我的问题是将表达式放在一起以找到匹配项。

我只走了这么远

   preg_replace('~^[A-Z]~', " ", $string)

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

我已经告诉它从头开始,并寻找大写字母,但我不知道该怎么做 - 将其限制为每个字符串的第一个单词 - 如何在空格后的替换部分中重用大写字母


答案 1

问题

  1. 您的正则表达式将仅匹配第一个大写字母。请查看模式语法中的元字符以了解更多信息。'~^[A-Z]~'

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

溶液

使用以下代码:

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

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


答案 2
$string = preg_replace('/[A-Z]/', ' $0', $string);

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

$string = ltrim(preg_replace('/[A-Z]/', ' $0', $string));

推荐