2015-06-16 20 views
2

我需要在大寫字母和數字之間進行拆分,並將一系列大寫字母拆分爲字符串中任意位置的整個單詞。這可能是最簡單的,只是舉例說明,請參見下面的測試腳本:需要一個複雜的正則表達式來分割駱駝案例和數字

$tests = array('FooBar', 'fooBar', 'Foobar', 'FooBar1', 'FooBAR', 'FooBARBaz', '1fooBar', '1FooBar', 'FOOBar'); 
foreach($tests as $test){ echo $test . " => " . split_camel_case($test) . "<br />"; } 

function split_camel_case($root){ 
    return implode(' ', preg_split('/(?<=[a-z])(?![a-z])/', $root, -1, PREG_SPLIT_NO_EMPTY)); 
} 

我從得到的是:

FooBar => Foo Bar 
fooBar => foo Bar 
Foobar => Foobar 
FooBar1 => Foo Bar 1 
FooBAR => Foo BAR 
FooBARBaz => Foo BARBaz 
1fooBar => 1foo Bar 
1FooBar => 1Foo Bar 
FOOBar => FOOBar 

最後四個是不正確的,他們應該是:

FooBARBaz => Foo BAR Baz 
1fooBar => 1 foo Bar 
1FooBar => 1 Foo Bar 
FOOBar => FOO Bar 

我發現了另一個問題StackOverflow的格局,但我一直沒能找到任何做正是我需要的。任何幫助將不勝感激。

回答

2

使用|只需添加其他案件額外possiblities:

$tests = array('FooBar', 'fooBar', 'Foobar', 'FooBar1', 'FooBAR', 'FooBARBaz', '1fooBar', '1FooBar', 'FOOBar'); 
foreach($tests as $test){ echo $test . " => " . split_camel_case($test) . "<br />"; } 

function split_camel_case($root){ 
    return implode(' ', preg_split('/(?<=[a-z])(?![a-z])|(?<=[0-9])(?![0-9])|(?<=[A-Z])(?=[A-Z][a-z])/', $root, -1, PREG_SPLIT_NO_EMPTY)); 
} 
+0

太感謝你了,完美的作品! – Michael

相關問題