Соответствующие слова из файла точно в 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";
}