2013-02-27 2 views
9

Я нашел этот похожий вопрос, но он не отвечает на мой вопрос, Split word by capital letter.Разделить заглавными буквами на PHP?

У меня есть строка camel case. Я хочу разбить эту строку на каждую заглавную букву, как показано ниже.

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

Я получил это далеко:

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

Но результирующий массив всегда заканчивается с пустым значением в начале! $parts выглядит следующим образом

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

Как я могу избавиться от пустого значения в начале массива?

ответ

14

Вы можете использовать флаг PREG_SPLIT_NO_EMPTY как это:

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

См documentation for preg_split.

2

Массив фильтр может быть использован, чтобы удалить все пустые значения:

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

Он хочет сгенерировать правильный массив, а не исправить сломанный. – Will

+1

Учитывая ответ Кара, это не лучший ответ, но, в свою защиту, спрашивающий спросил: «Как я могу избавиться от пустой ценности в начале массива?» – Jim

3

Вам нужен положительный-назад '. Попробуйте следующее:

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

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

Хороший подход, но @ Kara выигрывает его, хотя с его, спасибо! – ShaShads

+0

Кажется, что не работает с 'C CamelCase', может потребоваться настройка, если могут быть пробелы. –

+0

@Wesley, пробелы не были в исходном требовании, но это сработало бы: preg_split ('/ (?: (? <= \\ w) (? = [A-Z]) |) /', 'C CamelCase') – Will