将句子分割成单词

3

例如,我有这样的句子:

$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); 
}

这个

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

程序可以正常工作,但我有第二个问题,我想在我的正则表达式中写列表。 "w.d" 是一个特殊情况。例如,这些单词是我的列表 "w.d"、"mr."、"dr."。

如果我有以下文本:

$text = "word, dr. word w.d. word!..";

我需要得到数组:

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

sorry for bad english...


提问代码的问题必须展示对所解决问题的基本理解。请包括尝试过的解决方案、为何不起作用以及预期结果。 - undefined
什么是“单词”?在英语中,你如何定义“单词”?在你能够编写正则表达式之前,你必须能够用英语描述你要实现的规则。 - undefined
展示一下你目前尝试过的内容。不要描述它,而是编辑问题并粘贴实际的代码。然后告诉我们什么没有起作用。当你尝试时发生了什么?是否得到了错误的结果?是否得到了没有结果?如果结果不正确,是什么导致了它们的不正确?你期望得到什么样的结果?是否得到了任何正确的结果?如果有的话,那些结果是什么?不要让我们猜测。 - undefined
我尝试: function divide_a_sentence_into_words($text){ return preg_split('/(?<=[\s])(?<!f\s)\s+/ix', $text, -1, PREG_SPLIT_NO_EMPTY); } - undefined
3个回答

8
使用正则表达式/[^\w]*([\s]+[^\w]*|$)/preg_split结合使用应该能够正常工作。
<?php
    $text = "word word w.d. word!..";
    $split = preg_split("/[^\w]*([\s]+[^\w]*|$)/", $text, -1, PREG_SPLIT_NO_EMPTY);
    print_r($split);
?>

演示

输出:

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

是的,这个方法可以工作,但我有第二个问题,我想在我的正则表达式中写一个列表。 "w.d" 是一个特殊情况。 例如,这些词是我的列表:"w.d","mr.","dr."。如果我有以下文本:$text = "word, dr. word w.d. word!..";我需要一个数组:Array ( [0] => word [1] => dr. [2] => word [3] => w.d [4] => word ) - undefined

4
使用explode函数,它可以将字符串拆分为数组。
$words = explode(" ", $text);

3
这似乎是他想要忽略单词末尾的句号/标点符号。 - undefined
我明白它没有足够的内容来复制,但问题本身也没有提供太多信息,所以并不复杂。 - undefined
1
这个代码会给你最后一个单词: [4] => word!..而第二个单词将是 [1] => word, - undefined
这不仅是一个明显错误的答案,如果它真的是正确的答案,那么你应该投票关闭并标记为重复问题,而不是回答。 - undefined

2

1
请查看文档,该方法还会返回一个包含每个单词的数组。 - undefined
2
如果在$charlist参数中包含'.',那么它将被视为单词的一部分;尽管使用preg_split表达式更好,因为它可以区分字符之间的和跟随空格的 - undefined
这个回答没有尊重问题要求中的任务要求。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接