我一直在使用
explode(".",$mystring)
拆分成段的句子。 然而,这doen't已经结束了与不同的标点符号如盖的句子! ? :;
是否有使用数组作为分隔符,而不是单个字符的方式? Alternativly是有使用各种标点符号分裂的另一个非常简洁的方式?
我试过了
explode(("." || "?" || "!"),$mystring)
希望,但它没有工作...
我一直在使用
explode(".",$mystring)
拆分成段的句子。 然而,这doen't已经结束了与不同的标点符号如盖的句子! ? :;
是否有使用数组作为分隔符,而不是单个字符的方式? Alternativly是有使用各种标点符号分裂的另一个非常简洁的方式?
我试过了
explode(("." || "?" || "!"),$mystring)
希望,但它没有工作...
你可以做:
preg_split('/\.|\?|!/',$mystring);
或(简单):
preg_split('/[.?!]/',$mystring);
您可以使用preg_split()
与组合PCRE先行条件的每次出现后的字符串分割.
, ;
, :
, ?
, !
,..同时保持实际标点符号完整:
码:
$subject = 'abc sdfs. def ghi; this is an.email@addre.ss! asdasdasd? abc xyz';
// split on whitespace between sentences preceded by a punctuation mark
$result = preg_split('/(?<=[.?!;:])\s+/', $subject, -1, PREG_SPLIT_NO_EMPTY);
print_r($result);
结果:
Array
(
[0] => abc sdfs.
[1] => def ghi;
[2] => this is an.email@addre.ss!
[3] => asdasdasd?
[4] => abc xyz
)
假设你真的想与最终结果的标点符号标记,你有没有尝试过:
$mystring = str_replace("?","?---",str_replace(".",".---",str_replace("!","!---",$mystring)));
$tmp = explode("---",$mystring);
这会使你的标点符号机智。
preg_split('/\s+|[.?!]/',$string);
如果有,因为它可以将它的方式,通过拆分到新的行半电子邮件地址,一个可能的问题可能是。
使用使preg_split并给它一个正则表达式,例如[\ | \?]拆就
您可以尝试preg_split
$sentences = preg_split("/[\.\?\!,;]+/", $mystring);
请注意,这将删除标点符号。 如果你想去掉开头或结尾的空白,以及
$sentences = preg_split("/[\.\?\!,;]+\s+?/", $mystring);
$mylist = preg_split("/[\.|\?!:;]/", $mystring);
你不能有爆炸的多个分隔符。 这就是preg_split();
是。 但即便如此,它爆炸的分隔符,所以你会得到不句子的标点符号返回。 您可以使preg_split一步越走越标志它与PREG_SPLIT_DELIM_CAPTURE自己的元素他们回来,然后运行一些循环内爆句和下punctation标记返回数组中,或者只是使用preg_match_all();
:
preg_match_all('~.*?[?.!]~s', $string, $sentences);