2011-06-26 79 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可以精確計算模式在目標中出現的次數)。