拆分各种分隔符,同时保留分隔符?

时间:2010-08-09 07:11:51

标签: php regex split cjk

我想拆分文字
过公元年?因为无论你如何选择。简体字危及了对古代文学的研究输入!

使用这三个(或更多)?!。字符作为分隔符。 我当然可以这样做 $lines = preg_split('/[。,!,?]/u',$body);

但是我不希望结果行保留其结尾分隔符。句子也可能像啊。。。什么!??!!!!

那样结束

3 个答案:

答案 0 :(得分:5)

试试这个:

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

它分隔在一个前面有一个分隔符但未后跟一个分隔符的位置。它不使用分隔符,如果有两个或多个连续的分隔符,它只匹配最后一个分隔符。

答案 1 :(得分:0)

在这种情况下,您想自己编写字符串拆分器。并保持连续的分隔符作为一个整体。 (您可以设置一个状态变量,指示它是在文本块还是分隔符块中)。

答案 2 :(得分:0)

您应该使用preg_match_all代替preg_split,即

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

有关用法,请参阅http://www.ideone.com/rN7MB