代码之家  ›  专栏  ›  技术社区  ›  Austin Hyde

在PHP中将大写camel case分解为大写camel case

  •  5
  • Austin Hyde  · 技术社区  · 15 年前

    现在,我通过一个拆分、切片和内爆来实现这一点:

    $exploded = implode(' ',array_slice(preg_split('/(?=[A-Z])/','ThisIsATest'),1));
    //$exploded = "This Is A Test"
    

    更漂亮的版本:

    $capital_split = preg_split('/(?=[A-Z])/','ThisIsATest');
    $blank_first_ignored = array_slice($capital_split,1);
    $exploded = implode(' ',$blank_first_ignored);
    

    但是,问题是当你输入 'SometimesPDFFilesHappen' ,我的实现将(错误地)解释为 'Sometimes P D F Files Happen' .

    我怎样才能(简单地)使我的剧本浓缩 'P D F' 'PDF' ?

    我对何时应该拆分的条件是从第一个大写字母开始,在最后一个大写字母之前结束,以适应下一个单词。

    是的,我知道有些模棱两可的地方,比如 'ThisIsAPDFTest' ,这将被解释为 'This Is APDF Test' . 然而,我想不出一个“聪明”的方法来避免这一点,所以这是一个可以接受的妥协。

    1 回复  |  直到 13 年前
        1
  •  10
  •   mvds    15 年前
    $input = "SomePDFFile";
    
    $pass1 = preg_replace("/([a-z])([A-Z])/","\\1 \\2",$input);
    $pass2 = preg_replace("/([A-Z])([A-Z][a-z])/","\\1 \\2",$pass1);
    echo $pass2;
    

    或者,如果你非常信奉一种说法:

    preg_replace("/(([a-z])([A-Z])|([A-Z])([A-Z][a-z]))/","\\2\\4 \\3\\5",$input);
    

    很难看。