有使用php爆炸或其他类似的function保持分隔符的方法吗?

例如,我有一篇文章应该按照“ . ”,“ ? ”,“ ! ”和“ : ”这样的句子边界来分割。

但是,所有人都知道,无论preg_split还是explode函数,它们都会删除分隔符。

任何帮助将非常感激!

编辑:

我只能拿出下面的代码,虽然它工作得很好。

 $content=preg_replace('/([\.\?\!\:])/',"\\1[D]",$content); 

谢谢!!! 大家。 得到3个答案只有五分钟! 在提出问题之前,我必须非常小心地看不到PHP手册。 抱歉。

带有PREG_SPLIT_DELIM_CAPTURE标志的preg_split

将返回与delimiter = 0匹配的数组, match = 1

当使用preg_split并捕获分隔符时,可以设置标志PREG_SPLIT_DELIM_CAPTURE 。 然后你可以把每一对2 n和2 n +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]; } 

注意将拆分分隔符打包到一个组中,否则将不会被捕获。

我觉得这值得补充。 你可以通过使用正则expression式分割来保留“after”string中的分隔符:

 $input = "The address is http://stackoverflow.com/"; $parts = preg_split('@(?=http://)@', $input); // $parts[1] is "http://stackoverflow.com/" 

如果分隔符的长度是固定的,则可以通过使用逆序来保留“之前”部分的分隔符:

 $input = "The address is http://stackoverflow.com/"; $parts = preg_split('@(?<=http://)@', $input); // $parts[0] is "The address is http://" 

这种解决scheme在大多数情况下更简单,更清洁。