爆炸段落到PHP语句爆炸段落到PHP语句(Explode a paragraph into sent

2019-05-12 05:28发布

我一直在使用

explode(".",$mystring)

拆分成段的句子。 然而,这doen't已经结束了与不同的标点符号如盖的句子! ? :;

是否有使用数组作为分隔符,而不是单个字符的方式? Alternativly是有使用各种标点符号分裂的另一个非常简洁的方式?

我试过了

explode(("." || "?" || "!"),$mystring)

希望,但它没有工作...

Answer 1:

你可以做:

preg_split('/\.|\?|!/',$mystring);

或(简单):

preg_split('/[.?!]/',$mystring);


Answer 2:

您可以使用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
)


Answer 3:

假设你真的想与最终结果的标点符号标记,你有没有尝试过:

 $mystring = str_replace("?","?---",str_replace(".",".---",str_replace("!","!---",$mystring)));
 $tmp = explode("---",$mystring);

这会使你的标点符号机智。



Answer 4:

preg_split('/\s+|[.?!]/',$string);

如果有,因为它可以将它的方式,通过拆分到新的行半电子邮件地址,一个可能的问题可能是。



Answer 5:

使用使preg_split并给它一个正则表达式,例如[\ | \?]拆就



Answer 6:

您可以尝试preg_split

$sentences = preg_split("/[\.\?\!,;]+/", $mystring);

请注意,这将删除标点符号。 如果你想去掉开头或结尾的空白,以及

$sentences = preg_split("/[\.\?\!,;]+\s+?/", $mystring);


Answer 7:

$mylist = preg_split("/[\.|\?!:;]/", $mystring);


Answer 8:

你不能有爆炸的多个分隔符。 这就是preg_split(); 是。 但即便如此,它爆炸的分隔符,所以你会得到不句子的标点符号返回。 您可以使preg_split一步越走越标志它与PREG_SPLIT_DELIM_CAPTURE自己的元素他们回来,然后运行一些循环内爆句和下punctation标记返回数组中,或者只是使用preg_match_all();

preg_match_all('~.*?[?.!]~s', $string, $sentences);


文章来源: Explode a paragraph into sentences in PHP