Я новичок в регулярном выражении, и хочу разбить строку на разделителе, сохраняя этот разделитель в начале каждого элемента массива. Я пробовал это безуспешно и придумал:
$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
; если это не то, что вы хотите, просто избавьтесь от пробелов в регулярном выражении.