在PHP中将UpperCasedCamelCase爆炸为Upper Cased Camel Case

Aus*_*yde 5 php regex text-processing

现在,我正在用分裂,切片和内爆实现这个:

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

更漂亮的版本:

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

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

我怎样(简单地)让我的脚本压缩'P D F''PDF'

我应该分开的资格是从第一个首都开始,到最后一个结束,以适应下一个词.

是的,我知道存在一些含糊不清的内容,例如'ThisIsAPDFTest',会被解释为'This Is APDF Test'.但是,我无法想到一种"聪明"的方法来避免这种情况,因此这是一种可接受的妥协.

mvd*_*vds 10

$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;
Run Code Online (Sandbox Code Playgroud)

或者,如果你非常虔诚地发表声明:

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

这非常难看.