在两个被捕获的单词之间插入空格?

时间:2010-08-06 13:50:49

标签: php camelcasing

我有两个单词组合在一起 KitnerCoster 我想在中间添加一个空格,是否有任何一种技巧可以让任何人知道如果将两个单词分开,这两个单词都是大写的,这是唯一的区别。

2 个答案:

答案 0 :(得分:4)

使用正则表达式可以执行类似

的操作
s/([a-z])([A-Z])/'$1 $2'/g

然而,我编写正则表达式的第一次尝试通常会失败,因此您可能需要更正其中一个或另一个部分。

你想如何处理1个字符的长单词?就像FooXBar中的'X'一样?上述正则表达式不会将X识别为单独的单词。

答案 1 :(得分:3)

您是否关心第一个单词是否大写?如果没有,请执行

// ASCII
preg_replace('/([a-z])([A-Z])/', '$1 $2', $string)
preg_replace('/([[:lower:]])([[:upper:]])/', '$1 $2', $string)

// Unicode (UTF-8)
preg_replace('/(\p{Ll})(\p{Lu})/u', '$1 $2', $string)

如果您确实关心,并希望修复KitnerCostner但只留下kitnerCostner,那么

// ASCII
preg_replace('/\b([A-Z]\S*[a-z])([A-Z])/', '$1 $2', $string)
preg_replace('/\b([[:upper:]]\S*[[:lower:]])([[:upper:]])/', '$1 $2', $string)

// Unicode (UTF-8)
preg_replace('/\b(\p{Lu}\S*\p{Ll})(\p{Lu})/u', '$1 $2', $string)

我给的版本只匹配ASCII字母和匹配all Unicode characters的字母。 Unicode 5.1.0中提供了Unicode。