Ответ 1
preg_split
с флагом PREG_SPLIT_DELIM_CAPTURE
Вернет массив совпадений с delimiter = 0
, match = 1
Например, у меня есть статья, которая должна быть разделена по границе предложения, например ".
", "?
", "!
" и ":
".
Но также все знают, работают ли функции preg_split
или explode
, они оба удаляют разделитель.
Любая помощь будет действительно оценена!
EDIT:
Я могу только придумать код ниже, он отлично работает.
$content=preg_replace('/([\.\?\!\:])/',"\\1[D]",$content);
Спасибо!!! Все. Получать 3 ответа - всего пять минут! И я должен извиниться за то, что вы не смогли внимательно ознакомиться с руководством по PHP, прежде чем задавать вопрос. Сожалею.
preg_split
с флагом PREG_SPLIT_DELIM_CAPTURE
Вернет массив совпадений с delimiter = 0
, match = 1
Вы можете установить флаг PREG_SPLIT_DELIM_CAPTURE при использовании preg_split
и зафиксировать разделители. Затем вы можете взять каждую пару 2n и 2n + 1 и вернуть их вместе:
$parts = preg_split('/([.?!:])/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
$sentences = array();
for ($i=0, $n=count($parts)-1; $i<$n; $i+=2) {
$sentences[] = $parts[$i].$parts[$i+1];
}
if ($parts[$n] != '') {
$sentences[] = $parts[$n];
}
Примечание, чтобы упаковать разделительный разделитель в группу, иначе они не будут записаны.
Я чувствую, что это стоит добавить. Вы можете сохранить разделитель в строке "после", используя
$input = "The address is http://stackoverflow.com/";
$parts = preg_split('@(?<=http://)@', $input);
// $parts[0] is "The address is http://"
В большинстве случаев это решение проще и чище.