PHP разбивает строку на слово перед двоеточием

У меня есть строка, которая выглядит так:

aaaaa: lorem ipsum bb: dolor sit amet ccc: no pro movet

Каков наилучший способ разбить строку на массив и получить следующий результат в PHP?

array[0]='aaaaa: lorem ipsum';
array[1]='bb: dolor sit amet';
array[2]='ccc: no pro movet';

Я могу написать функцию, которая находит позицию каждого ":", находит длину слова перед ним и разбивает строку. Но я думаю, что есть более простой способ использования регулярных выражений?

2 ответа

Решение

Для такой работы я буду использовать preg_match_all:

$str = 'aaaaa: lorem ipsum bb: dolor sit amet ccc: no pro movet';
preg_match_all('/\S+:.+?(?=\S+:|$)/', $str, $m);
print_r($m);

Выход:

Array
(
    [0] => Array
        (
            [0] => aaaaa: lorem ipsum 
            [1] => bb: dolor sit amet 
            [2] => ccc: no pro movet
        )

)

Объяснение:

\S+:        : 1 or more NON space followed by colon
.+?         : 1 or more any character not greedy
(?=\S+:|$)  : lookahead, make sure we have 1 or more NON space followed by colon or end of string

Ваш желаемый 1-dim массив может быть достигнут с preg_split() как просили:

Мой шаблон будет разбивать строку на каждый пробел, за которым следуют одна или несколько строчных букв, затем двоеточие, затем пробел.

Код: ( Демо)

$string='aaaaa: lorem ipsum bb: dolor sit amet ccc: no pro movet';
var_export(preg_split('/ (?=[a-z]+: )/',$string));

Выход:

array (
  0 => 'aaaaa: lorem ipsum',
  1 => 'bb: dolor sit amet',
  2 => 'ccc: no pro movet',
)
Другие вопросы по тегам