我试图查看字符串中的单词是否与文件中的单词完全匹配。所以说我有一句话:
“我爱足球”
foreach ($match as $macthes)
{
if (stripos("I love football",$match) !== false) {
break;
}
}
do something here
上面的方法有效,它会找到爱,然后做我想要的东西,但是当有人输入更短版本的单词时它也有效,所以说我正在寻找“高兴”但有人只是把“请”它会显示结果,我不希望这样。
有没有办法只有找到完全匹配才能运行我的方法?
要查找完整的单词,您可以使用带有边界字符的正则表达式:\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';
}
}
?>
使用此选项然后在文本文件中,将每个单词放在一个单独的行上,例如
字1
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";
}