PHP preg_split: разделите строку другими строками

Я хочу разбить большую строку на ряд слов.

Например

$splitby = array('these','are','the','words','to','split','by'); $text = 'This is the string which needs to be split by the above words.'; 

Тогда результаты будут следующими:

 $text[0]='This is'; $text[1]='string which needs'; $text[2]='be'; $text[3]='above'; $text[4]='.'; 

Как я могу это сделать? Лучше ли preg_split , или есть более эффективный метод? Я бы хотел, чтобы это было как можно быстрее, так как я буду разбивать сотни МБ файлов.

Я не думаю, что использование pcre regex необходимо … если это действительно разделение слов, которые вам нужны.

Вы могли бы сделать что-то подобное, и контрольные точки будут видеть, будет ли это быстрее / лучше …

 $splitby = array('these','are','the','words','to','split','by'); $text = 'This is the string which needs to be split by the above words.'; $split = explode(' ', $text); $result = array(); $temp = array(); foreach ($split as $s) { if (in_array($s, $splitby)) { if (sizeof($temp) > 0) { $result[] = implode(' ', $temp); $temp = array(); } } else { $temp[] = $s; } } if (sizeof($temp) > 0) { $result[] = implode(' ', $temp); } var_dump($result); /* output array(4) { [0]=> string(7) "This is" [1]=> string(18) "string which needs" [2]=> string(2) "be" [3]=> string(5) "above words." } 

Единственное отличие от вашего вывода – это последнее слово, потому что «слова». ! = «слово», и это не разделенное слово.

Это должно быть достаточно эффективным. Однако вы можете протестировать некоторые файлы и сообщить о производительности.

 $splitby = array('these','are','the','words','to','split','by'); $text = 'This is the string which needs to be split by the above words.'; $pattern = '/\s?'.implode($splitby, '\s?|\s?').'\s?/'; $result = preg_split($pattern, $text, -1, PREG_SPLIT_NO_EMPTY); 

preg_split может использоваться как:

 $pieces = preg_split('/'.implode('\s*|\s*',$splitby).'/',$text,-1,PREG_SPLIT_NO_EMPTY); 

Видеть это

Поскольку слова в вашем $ splitby массиве не являются регулярным выражением, возможно, вы можете использовать

str_split