我有很多字符串,其中包含拼凑在一起的单词,我需要将它们分开。
例如 ThisWasCool - 这很酷 MyHomeIsHere - 我的家就在这里
我正慢慢地了解正则表达式,我相信这样做我应该使用preg_replace。我的问题是将表达式放在一起以找到匹配。
我只有这么远
preg_replace('~^[A-Z]~', " ", $string)
每个字符串包含很多单词,但只有第一个单词包含成束单词,所以使用我上面的字符串示例将是
“ThisWasCool再次拜访你” - “这很酷,再次拜访你”
我已经告诉它从头开始,寻找首都,但我不知道怎么做是 - 仅限于每个字符串的第一个单词 - 如何在空格后重新使用替换部分中的大写字母
答案 0 :(得分:65)
您的正则表达式'~^[A-Z]~'
只会匹配第一个大写字母。有关详细信息,请查看Meta Characters中的Pattern Syntax。
您的替代品是换行符'\n'
,而不是空格。
使用此代码:
$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);