我有两个单词组合在一起
KitnerCoster
,我想在中间添加一个空格,如果分隔两个都大写的单词,有没有人知道的任何技巧,这是唯一的区别。
问问题
1567 次
2 回答
4
使用正则表达式,您可以执行类似的操作
s/([a-z])([A-Z])/'$1 $2'/g
但是,我第一次尝试编写正则表达式通常会失败,因此您可能必须更正其中的一部分。
你想如何处理一个 1 字符长的单词?就像 FooXBar 中的“X”?上述正则表达式不会将 X 识别为单独的单词。
于 2010-08-06T13:53:18.100 回答
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 字母和匹配所有 Unicode 字符的版本。Unicode 的在 PHP 5.1.0 中可用。
于 2010-08-06T13:57:21.057 回答