【问题标题】:Matching words from a file exactly in PHP在 PHP 中完全匹配文件中的单词
【发布时间】:2014-04-14 13:24:02
【问题描述】:

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

“我喜欢足球”

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

do something here

上面的方法有效,它会找到爱然后做我想做的事,但是当有人输入一个较短版本的单词时它也有效,所以说我在搜索“高兴”但有人只输入“请”它会显示结果,我不希望这样。

有什么方法可以只在找到完全匹配的情况下运行我的方法?

【问题讨论】:

    标签: php match


    【解决方案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 值包含特殊字符,它们会被转义,这样它们就不会改变表达式的含义。

    【讨论】:

    • 改进了它,但我仍然在“to”之类的词上得到匹配,并且我在情绪文件中已经“触摸”了
    【解决方案2】:
    <?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

    单词3

    等等……

    【讨论】:

      【解决方案3】:

      下面的函数将在目录的所有文件中搜索单词。 $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";
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-01
        相关资源
        最近更新 更多