例如,我有一篇文章应根据句子边界分割,如" .
"," ?
"," !
"和" :
".
但正如大家都知道,无论是preg_split
或explode
功能,它们都删除分隔符.
任何帮助将非常感激!
编辑:
我只能提出下面的代码,虽然效果很好.
$content=preg_replace('/([\.\?\!\:])/',"\\1[D]",$content);
Run Code Online (Sandbox Code Playgroud)
谢谢!!!大家.得到3个答案只需五分钟!我必须道歉,因为在提问之前无法仔细查看PHP手册.抱歉.
wav*_*ode 19
我觉得这值得补充.您可以使用正则表达式前瞻分割将分隔符保留在"after"字符串中:
$input = "The address is http://stackoverflow.com/";
$parts = preg_split('@(?=http://)@', $input);
// $parts[1] is "http://stackoverflow.com/"
Run Code Online (Sandbox Code Playgroud)
如果分隔符具有固定长度,则可以使用lookbehind将分隔符保留在"before"部分中:
$input = "The address is http://stackoverflow.com/";
$parts = preg_split('@(?<=http://)@', $input);
// $parts[0] is "The address is http://"
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,该解决方案更简单,更清洁.
Gum*_*mbo 15
使用和捕获分隔符时,可以设置标志PREG_SPLIT_DELIM_CAPTUREpreg_split
.然后你可以把每对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];
}
Run Code Online (Sandbox Code Playgroud)
请注意将拆分分隔符打包到一个组中,否则将不会捕获它们.