Разделить на разные разделители, сохраняя разделитель?

Я хотел бы разделить текст
过公元年?因为无论你如何选择。简体字危及了对古代文学的研究输入!

Использование этих трех (или более)?! Символов в качестве разделителя. я могу это сделать, конечно, с
$lines = preg_split('/[。,!,?]/u',$body);

Однако я не хочу, чтобы результирующие строки сохраняли свой конечный разделитель. Также предложение может закончиться так же, как и 啊。。。 или 什么!??!!!!

Попробуй это:

 $lines = preg_split('/(?<=[。!?])(?![。!?])/u',$body); 

Он разбивается на позицию, которой предшествует один из ваших символов разделителя, но не за ней. Он не использует разделитель, и если есть два или более последовательных разделителя, он совпадает только после последнего.

В этом случае вы хотите написать разделитель строк самостоятельно. И сохраняйте непрерывные разделители в целом. (вы можете установить переменную состояния, указывающую, находится ли она в блоке текстового блока или разделителя).

Вы должны использовать preg_match_all вместо preg_split , т.е.

 preg_match_all("/[^?!。]+[?!。]+/u", $text, $res); 

См. http://www.ideone.com/rN7MB для использования.