【问题标题】:Insert space between two captalized words?在两个大写单词之间插入空格?
【发布时间】:2010-08-06 13:50:49
【问题描述】:

我有两个词组合起来像 KitnerCoster 而且我想在中间添加一个空格,如果分隔两个都大写的单词并且这是唯一的区别,是否有任何人知道的技巧。

【问题讨论】:

    标签: php camelcasing


    【解决方案1】:

    使用正则表达式你可以做类似的事情

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

    但是,我第一次尝试编写正则表达式通常会失败,因此您可能必须更正其中一个或其他部分。

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

    【讨论】:

    • +1 因为我很少写一个在第一次试用时有效的正则表达式。
    • 将其更改为 preg_compatible 正则表达式(解决方案很好,但问题是关于 PHP):preg_replace('/([a-z])([A-Z])/', '$1 $2', $string);...
    【解决方案2】:

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

    // 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 中可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 2019-10-14
      • 1970-01-01
      相关资源
      最近更新 更多