Php 分句

Php 分句,php,text-segmentation,Php,Text Segmentation,例如,我有这样的句子: $text = "word, word w.d. word!.."; 我需要这样的阵列 Array ( [0] => word [1] => word [2] => w.d [3] => word". ) 我对正则表达式很陌生 以下是我尝试过的: function divide_a_sentence_into_words($text){ return preg_split('/(?<=[\s])(

例如,我有这样的句子:

$text = "word, word w.d. word!..";
我需要这样的阵列

Array
(
    [0] => word
    [1] => word
    [2] => w.d
    [3] => word".
)
我对正则表达式很陌生

以下是我尝试过的:

function divide_a_sentence_into_words($text){ 
    return preg_split('/(?<=[\s])(?<!f\s)\s+/ix', $text, -1, PREG_SPLIT_NO_EMPTY); 
}
行,但我有第二个问题,我想用mu正则表达式写一个列表 “w.d”是特例。。例如,这个单词是我的列表“w.d”,“mr.”,“dr.”

如果我要发短信:

$text=“word,word博士w.d.word!”

我需要阵列:

Array (
  [0] => word
  [1] => dr.
  [2] => word
  [3] => w.d
  [4] => word 
)

抱歉,英语不好…

请使用函数explode,它会将字符串拆分为一个数组

$words = explode(" ", $text);

使用函数explode,将字符串拆分为数组

$words = explode(" ", $text);
使用

看这里 这正是你想要的。因此,在你的情况下:

$myarray = str_word_count ($text,1);
使用

看这里 这正是你想要的。因此,在你的情况下:

$myarray = str_word_count ($text,1);

preg_split
与正则表达式
/[^\w]*([\s]+[^\w]*.$)/
一起使用应该可以正常工作:

<?php
    $text = "word word w.d. word!..";
    $split = preg_split("/[^\w]*([\s]+[^\w]*|$)/", $text, -1, PREG_SPLIT_NO_EMPTY);
    print_r($split);
?>

preg_split
与正则表达式
/[^\w]*([\s]+[^\w]*.$)/
一起使用应该可以正常工作:

<?php
    $text = "word word w.d. word!..";
    $split = preg_split("/[^\w]*([\s]+[^\w]*|$)/", $text, -1, PREG_SPLIT_NO_EMPTY);
    print_r($split);
?>

询问代码的问题必须证明对正在解决的问题的最低理解。包括尝试过的解决方案,为什么它们不起作用,以及预期的结果。什么是“单词”?在英语中,你如何定义“单词”呢?在编写正则表达式之前,您必须能够用英语描述您试图实现的规则。向我们展示您迄今为止的尝试。不要描述它,而是编辑问题并粘贴到实际代码中。然后告诉我们什么不起作用。你试的时候发生了什么?你得到了不正确的结果吗?你没有得到结果吗?如果结果不正确,是什么导致结果不正确?你在期待什么?你得到正确的结果了吗?如果是,它们是什么?不要让我们猜测。我试着:函数将句子分成单词($text){return preg_split('/)(?询问代码的问题必须证明对正在解决的问题的最低理解。包括尝试的解决方案,为什么不起作用,以及预期的结果。什么是“单词”?在英语中,你如何定义“单词”是吗?在编写正则表达式之前,你必须能够用英语描述你试图实现的规则。向我们展示你迄今为止所尝试的。不要描述它,而是编辑问题并粘贴到实际代码中。然后告诉我们什么不起作用。当你尝试它时发生了什么?你得到了错误的结果吗?你知道吗没有结果?如果结果不正确,是什么使它们不正确?你期望的是什么?你得到了任何正确的结果吗?如果是,它们是什么?不要让我们猜测。我尝试:函数将句子分割成单词($text){return preg_split($text)/(?看起来他想忽略单词末尾的句点/标点符号。我知道它没有足够的内容来重现,但问题也没有太多信息,所以它没有那么复杂。这给了你最后一个单词:[4]=>word!。第二个单词将是[1]=>word,看起来他想忽略单词末尾的句点/标点符号。我知道它没有足够的内容来重现,但问题也没有太多信息,所以它没有那么复杂。这给了你最后一个单词:[4]=>word!。第二个单词将是[1]=>word,请参阅文档,此方法还返回数组中的每个单词。如果“.”包含在$charlist参数中,则它将被视为单词的一部分;尽管preg_分割表达式会更好,因为它可以区分字符之间的
和后跟空格的
请参阅文档,此方法也会重新定义将数组中的每个单词转换为如果“.”包含在$charlist参数中,那么它将被视为单词的一部分;尽管preg_分割表达式会更好,因为它可以区分字符之间的
和后跟空格的
,这是可行的,但我还有第二个问题,我想用mu reg编写列表规则表达式“w.d”是一个特例。例如,这个单词是我的列表“w.d”,“mr.”,“dr.”如果我愿意接受文本:$text=“word,dr.word w.d.word!”,我需要数组:数组([0]=>word[1]=>dr[2]=>word[3]=>w.d[3]=>word)是的,这是有效的,但我有第二个问题,我想在mu正则表达式中写一个列表,“w.d”是特例。例如,这个单词是我的列表“w.d”,“先生”,“博士”。如果我要文本:$text=“word,dr.word w.d.word!”,“我需要数组:数组([0]=>word[1]=>dr.[2]=>word[3]=>w.d[3]=>word)