我使用以下代码搜索文本文件:
$query="red";
$FileName = "search.txt";
$fh = fopen($FileName, 'r') or die("Can't open file");
$data = fread($fh, filesize($FileName));
$Pos = strpos($data,$query);
if ($Pos)
{
echo "Found";
}
else
{
echo "Not Found";
}
让文本文件为:
orange_red blue_gray yellow_blue white_black
它在red
找到orange_red
,但我希望匹配整个单词。
例如:
如果要搜索的文本是red
我希望它返回false,因为red
不是独立存在的,它是单词orange_red
的一部分。
简而言之,我想搜索由space
搜索red
和orange
应返回false,搜索orange_red
应返回true。
答案 0 :(得分:1)
使用explode
将字符串拆分为数组。然后使用array_search
搜索数组,看它是否包含您确切的单词。
答案 1 :(得分:1)
$query="red";
$FileName = "search.txt";
foreach (explode(" ", strtolower(file_get_contents($FileName)) as $word) {
if (strtolower($query) == $word) {
$found = true;
break;
}
}
echo $found ? "Found" : "Not found";
嗯,效率稍差,但它可以完成工作。
答案 2 :(得分:1)
这是我能想到的最简单/最快的方式:
$query = "red";
$FileName = "search.txt";
if(preg_match("/\b" . $query . "\b/i"), file_get_contents($FileName))
{
echo "Found";
}
else
{
echo "Not Found";
}
\b
匹配单词边界,因此它只返回$ query的独立结果。 preg_match
返回一个int,表示找到模式的次数(将为0或1,因为preg_match在第一次匹配后停止 - 使用preg_match_all
来准确计算模式的次数模式出现在目标中。)
答案 3 :(得分:0)
尝试此操作,在空格处拆分数据,然后查看查询是否在数组中。
$query="red";
$FileName = "search.txt";
$fh = fopen($FileName, 'r') or die("Can't open file");
$data = fread($fh, filesize($FileName));
$items = explode(" ", $data);
$Pos = array_search ($query, $items);
if($Pos !== FALSE)
{
echo "Found";
}
else
{
echo "Not Found";
}
答案 4 :(得分:-1)
尝试将strpos
与" $query "
一起使用,或使用正则表达式和preg_match
:
$query = "red";
if (strpos($data, " {$query} ") !== false) {
// data contains " red "
}
// OR
if (preg_match("/(^{$query}( )|( ){$query}( )|( ){$query}$)/", $data) === 1) {
// match found
}