【发布时间】:2010-08-06 13:50:49
【问题描述】:
我有两个词组合起来像
KitnerCoster
而且我想在中间添加一个空格,如果分隔两个都大写的单词并且这是唯一的区别,是否有任何人知道的技巧。
【问题讨论】:
标签: php camelcasing
我有两个词组合起来像
KitnerCoster
而且我想在中间添加一个空格,如果分隔两个都大写的单词并且这是唯一的区别,是否有任何人知道的技巧。
【问题讨论】:
标签: php camelcasing
使用正则表达式你可以做类似的事情
s/([a-z])([A-Z])/'$1 $2'/g
但是,我第一次尝试编写正则表达式通常会失败,因此您可能必须更正其中一个或其他部分。
您想如何处理一个 1 字符长的单词?就像 FooXBar 中的“X”?上面的正则表达式不会将 X 识别为单独的单词。
【讨论】:
preg_replace('/([a-z])([A-Z])/', '$1 $2', $string);...
您是否关心第一个单词是否大写?如果没有,请执行
// 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 的在 PHP 5.1.0 中可用。
【讨论】: