Разделить по разным разделителям, сохраняя разделитель? - PullRequest
2 голосов
/ 09 августа 2010

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

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

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

Ответы [ 3 ]

5 голосов
/ 09 августа 2010

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

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

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

0 голосов
/ 09 августа 2010

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

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

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

0 голосов
/ 09 августа 2010

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

...