使用正则表达式和PHP从字符串中查找第一个匹配项?

时间:2013-02-11 17:52:52

标签: php regex

我试图从文本正文中找到所有独特的整个单词。目前这是我正在使用但它似乎没有工作:

$textDump = "cat dog monkey cat snake horse"
$wholeWord = "/[\w]*/";
$uniqueWords = (preg_match($wholeWord, $textDump, $matches));

任何帮助将不胜感激。谢谢!

4 个答案:

答案 0 :(得分:6)

array_unique(
    str_word_count($textDump,1)
);

答案 1 :(得分:2)

您可以使用str_word_count

$textDump = "cat dog monkey cat snake horse";
$uniqueWords = (str_word_count($textDump, 1);

答案 2 :(得分:1)

在这种情况下,为什么不使用explode();array_unique();来实现这一目标?

$text = "cat dog monkey cat snake horse";

$foo = explode(" ", $text);
print_r(array_unique($foo)); 

答案 3 :(得分:1)

到目前为止给出的答案都假设,“找到所有独特的整个单词”,你的意思是“删除重复”。实际上你的问题不是很明确,因为你没有在你的例子中指明你想要的输出,但是我会接受你的话并为“找到所有独特的整个单词”提供解决方案。

这意味着,对于输入:

"cat dog monkey cat snake horse"

您将获得输出:

"dog monkey snake horse"

实际上,str_word_count对此也有用,与array_count_values一起实际上计算不同的

$wordCount = array_count_values(str_word_count($textDump,1));

$wordCount现在是:

array(5) {
  ["cat"]    => int(2)
  ["dog"]    => int(1)
  ["monkey"] => int(1)
  ["snake"]  => int(1)
  ["horse"]  => int(1)
}

接下来,删除单词数大于1的单词(注意,实际单词是数组键,因此我们使用array_keys来获取它们:

$uniqueWords = array_keys(
    array_filter(
        $wordCount,
        function($count) {
            return $count === 1;
        }
    )
);

$uniqueWords现在是:

array(4) {
  [0] => string(3) "dog"
  [1] => string(6) "monkey"
  [2] => string(5) "snake"
  [3] => string(5) "horse"
}

完整代码:

$textDump = "cat dog monkey cat snake horse";
$wordCount = array_count_values(str_word_count($textDump,1));
$uniqueWords = array_keys(
    array_filter(
        $wordCount,
        function($count) {
            return $count === 1;
        }
    )
);
echo join(' ', $uniqueWords);
//dog monkey snake horse