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

jv4diomz  于 12个月前  发布在  PHP
关注(0)|答案(5)|浏览(174)

我有一些字符串,其中包含的话是捆绑在一起,我需要分开他们了。
此分类下一篇:This Was Cool
我的家在这里
我正在慢慢地了解正则表达式,我相信要做到这一点,我应该使用preg_replace。我的问题是把表达式放在一起来找到匹配。
我只走了这么远

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

字符串
每个字符串都包含很多单词,但只有第一个单词包含成串的单词,因此使用我上面的字符串示例将是
“This WasCool to visit you again”-“This WasCool to visit you again”(再次拜访你真是太酷了)
我已经告诉它从头开始,寻找大写字母,但我不知道如何做的是-限制它只对每个字符串的第一个字-如何在替换部分重复使用大写字母后的空间

r3i60tvu

r3i60tvu1#

问题

1.您的正则表达式'~^[A-Z]~'将只匹配第一个大写字母。查看Pattern Syntax中的Meta Characters以了解更多信息。
1.您的替换是换行符'\n',而不是空格。

解决方案

使用此代码:

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

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

w7t8yxp5

w7t8yxp52#

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

字符串
也许运行结果通过ltrim后。

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

hgncfbus

hgncfbus3#

这是我的.02c,这个版本将只对第一个字起作用,并将保留字母序列(宝马)。

$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;

字符串

iaqfqrcu

iaqfqrcu4#

我对正则表达式并不精通,但我建议使用以下代码:

$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);

jw5wzhpr

jw5wzhpr5#

只是改变了上面的代码对所有的话行动

$str = "CheckOutMyBMW I bought itYesterday";
$parts = explode(' ', $str);
$parts2 = array();
foreach($parts as $key => $part){
    $parts2[$key] = preg_replace('~([a-z])([A-Z])~', '\\1 \\2', $part); 
}
$newstr = implode(' ', $parts2);
echo $newstr;

字符串
//看看我的宝马我昨天买的

相关问题