2013-02-27 39 views
9

Ich fand diese ähnliche Frage, aber es beantwortet nicht meine Frage, Split word by capital letter.Split in Großbuchstaben in PHP?

Ich habe eine Zeichenfolge, die camel case ist. Ich möchte diese Zeichenfolge bei jedem Großbuchstaben wie unten aufteilen.

$str = 'CamelCase'; // array('Camel', 'Case'); 

Ich habe so weit gekommen:

$parts = preg_split('/(?=[A-Z])/', 'CamelCase'); 

Aber das resultierende Array endet immer mit einem leeren Wert am Anfang up! $parts sieht wie folgt aus

$parts = array('', 'Camel', 'Case'); 

Wie kann ich von den leeren Wert am Anfang des Arrays loswerden?

Antwort

14

Sie können die PREG_SPLIT_NO_EMPTY Flagge wie folgt verwenden:

$parts = preg_split('/(?=[A-Z])/', 'CamelCase', -1, PREG_SPLIT_NO_EMPTY); 

die documentation for preg_split See.

2

Array-Filter kann verwendet werden, um alle leeren Werte zu entfernen:

$parts = array_filter($parts, 'strlen'); 
+1

Er möchte das richtige Array generieren, nicht das gebrochene reparieren. – Will

+1

Angesichts der Antwort von Kara ist das nicht die beste Antwort, aber zu meiner Verteidigung fragte der Fragesteller speziell: "Wie kann ich den leeren Wert am Anfang des Arrays loswerden?" – Jim

3

Sie benötigen einen positiven Lookbehind. Versuchen Sie folgendes:

$parts = preg_split('/(?<=\\w)(?=[A-Z])/', 'CamelCase') 

array(2) { 
    [0]=> 
    string(5) "Camel" 
    [1]=> 
    string(4) "Case" 
} 
+1

Schöne Annäherung, aber @Kara gewinnt es zwar mit seinem, danke! – ShaShads

+0

Scheint nicht mit 'C CamelCase' zu ​​funktionieren, muss möglicherweise angepasst werden, wenn Leerzeichen vorhanden sein können. –

+0

@Wesley, Leerzeichen waren nicht in der ursprünglichen Anforderung, aber das würde funktionieren: preg_split ('/ (?: (? <= \\ w) (? = [A-Z]) |) /', 'C CamelCase') – Will