PHP preg_split при сохранении разделителя в начале элемента массива

Я новичок в регулярном выражении, и хочу разбить строку на разделителе, сохраняя этот разделитель в начале каждого элемента массива. Я пробовал это безуспешно и придумал:

$str = 'LOTS OF STUFF AND SOME MORE STUFF AND SOME OTHER STUFF'; $matches = preg_split('/(\ AND)/', $str, null, PREG_SPLIT_DELIM_CAPTURE); 

Это ставит разделитель как свой собственный элемент:

 [0]=>"LOTS OF STUFF" [1]=>" AND" [2]=>" SOME MORE STUFF" [3]=>" AND" [4]=>" SOME OTHER STUFF" 

Но я хотел сохранить разделитель в начале элемента:

 [0]=>"LOTS OF STUFF" [1]=>" AND SOME MORE STUFF" [2]=>" AND SOME OTHER STUFF" 

Я подумал, может быть, я смогу сделать это, пытаясь использовать внешний вид, но потом снова потерял разделитель:

  $matches = preg_split('/(?<=\s)AND/', $str, null, PREG_SPLIT_DELIM_CAPTURE); [0]=>"LOTS OF STUFF" [1]=>" SOME MORE STUFF" [2]=>" SOME OTHER STUFF" 

Хотелось бы помочь, спасибо!

Используйте lookahead assertion ( (?=) ) Для разделения на строковые позиции, за которыми следует AND :

 $str = 'LOTS OF STUFF AND SOME MORE STUFF AND SOME OTHER STUFF'; $matches = preg_split('/ (?=AND)/', $str); var_dump($matches); /* array(3) { [0]=> string(13) "LOTS OF STUFF" [1]=> string(19) "AND SOME MORE STUFF" [2]=> string(20) "AND SOME OTHER STUFF" } */ 

Демо . Этот код удаляет пробелы, предшествующие AND ; если это не то, что вы хотите, просто избавьтесь от пробелов в регулярном выражении.