2011-06-26 71 views
2

我用下面的代码来搜索文本文件中搜索词:PHP的问题在文本文件中

$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 

它在orange_red发现red,但我想要匹配整个单词。 例如: 如果要搜索的文本是要red

我想它,因为red并不是独立存在的是字orange_red的一部分返回false。

总之我要搜索的space

搜索redorange应返回false和搜索orange_red应返回true分隔的单词。

回答

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"; 
} 
-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 
} 
1

拆分串入使用explode阵列。然后使用array_search搜索数组以查看它是否包含您的确切单词。

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"; 

咩,一点点效率较低,但它能够完成任务。

+0

尽管我相信array_search更快,但我不知道。这是另一种解决方案,不是那么少 – Ben

1

这是我能想到的最简单的/最快的方式:

$query = "red"; 
$FileName = "search.txt"; 

if(preg_match("/\b" . $query . "\b/i"), file_get_contents($FileName)) 
{ 
    echo "Found"; 
} 
else 
{ 
    echo "Not Found"; 
} 

\b单词边界匹配,所以它只会返回$查询单机结果。 preg_match返回一个int值,表示发现模式的次数(可以是0或1,因为preg_match在第一次匹配后停止 - 使用preg_match_all可以精确计算模式在目标中出现的次数)。