完全用PHP匹配文件中的单词

问题描述 投票:0回答:3

我试图查看字符串中的单词是否与文件中的单词完全匹配。所以说我有一句话:

“我爱足球”

foreach ($match as $macthes)
{
    if (stripos("I love football",$match) !== false) {
        break;
    }
}

do something here

上面的方法有效,它会找到爱,然后做我想要的东西,但是当有人输入更短版本的单词时它也有效,所以说我正在寻找“高兴”但有人只是把“请”它会显示结果,我不希望这样。

有没有办法只有找到完全匹配才能运行我的方法?

php match
3个回答
1
投票

要查找完整的单词,您可以使用带有边界字符的正则表达式:\b

if (preg_match('/\b'.preg_quote($emotion).'\b/', $value['message'])) {

重要的是将\b放在您要查找的单词或短语之前和之后,这表示单词边界:

单词边界是主题字符串中的位置,其中当前字符和前一个字符不匹配\ w或\ W(即一个匹配\ w,另一个匹配\ W),或字符串的开头或结尾第一个或最后一个字符分别匹配\ w。 http://uk3.php.net/manual/en/regexp.reference.escape.php

或者更简单地说我们如何使用它:字符串匹配之前和之后的字符必须是不能继续单词的字符。如文件/行的开头或结尾,或空格,标点符号等。

我们也使用preg_quote,以确保如果任何$emotion值包含特殊字符,它们将被转义,以便它们不会改变表达式的含义。


0
投票
<?php
foreach ($emotions as &$emotion) {
 $words = file_get_contents('completeEmotions.txt');
 $word = strpos($words, $value['message']) ? true : false;
  if ($word) {
      echo 'word found';
  } else {
      echo 'word not found';
  }
}
?>

使用此选项然后在文本文件中,将每个单词放在一个单独的行上,例如

字1

WORD2

WORD3

等等...


0
投票

下面的函数将搜索目录的所有文件中的单词。 $matches数组将为您提供找到该单词的所有文件。我想这可能会有所帮助。

foreach (glob("<directory>/*.txt") as $search) 
{
    $contents = file_get_contents($search);
    if (!strpos($contents, "text")) 
        continue;
    else
        $matches[] = $search;
}

if(sizeof($matches) == 0)
{
    echo "Word not found";
}
else
{
    echo "Word found";
}
© www.soinside.com 2019 - 2024. All rights reserved.