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

时间:2009-07-06 23:07:52

标签: php regex

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

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

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

我只有这么远

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

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

我已经告诉它从头开始,寻找首都,但我不知道怎么做是 - 仅限于每个字符串的第一个单词 - 如何在空格后重新使用替换部分中的大写字母

4 个答案:

答案 0 :(得分:65)

问题

  1. 您的正则表达式'~^[A-Z]~'只会匹配第一个大写字母。有关详细信息,请查看Meta Characters中的Pattern Syntax

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

  3. 解决方案

    使用此代码:

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

    (?<!\ )是一个assertion,可以确保我们不会在大写字母之前添加空格。

答案 1 :(得分:13)

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

可能在ltrim之后运行结果。

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

答案 2 :(得分:2)

这是我的.02c,这个版本只对第一个单词起作用,并且会保留大写字母序列(BMW)。

$str = "CheckOutMyBMW I bought it yesterday";
$parts = explode(' ', $str);
$parts[0] = preg_replace('~([a-z])([A-Z])~', '\\1 \\2', $parts[0]);
$newstr = implode(' ', $parts);
echo $newstr;

答案 3 :(得分:1)

我不熟悉正则表达式,但我会建议类似下面的代码:

$string="ThisWasCool to visit you again";
$temp = explode(' ',$string, 2);
$temp[0] = preg_replace('/(.)([A-Z])/','$1 $2', $temp[0]);
$string = join(' ',$temp);

看看SirLancelot代码我有第二个解决方案。我仍然更喜欢爆炸解决方案,因为你声明你的目标只是字符串的第一个字。

$string="ThisWasCool to visit you again";
$temp = explode(' ',$string, 2);
$temp[0] = preg_replace('/(?<!^)([A-Z])/',' $0', $temp[0]);
$string = join(' ',$temp);