Соответствующие слова из файла точно в php

Я пытаюсь увидеть, если слова в строке соответствуют словам в файле точно. так сказать, у меня был часовой

"я люблю футбол"

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



                do something here

вышеупомянутый метод работает, он найдет любовь и затем сделает то, что я хочу, но он также работает, когда кто-то печатает более короткую версию слова, так что я искал "довольный", но кто-то только вставил "пожалуйста" показал бы результат, и я не хочу этого.

Есть ли способ, которым я могу запустить свой метод, только если точное совпадение найдено?

3 ответа

Чтобы найти полное слово, вы можете использовать регулярное выражение с символом границы слова: \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 значения включают специальные символы, которые они экранируют, чтобы они не меняли значение выражения.

<?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';
  }
}
?>

Используйте это и затем в своем текстовом файле, поместите каждое слово в отдельную строку, например

word1

word2

word3

и так далее...

Ниже функция будет искать слово во всем файле каталога. $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";
}
Другие вопросы по тегам