php问题搜索文本文件中的单词

时间:2011-06-26 20:06:06

标签: php string

我使用以下代码搜索文本文件:

$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

分隔的单词

搜索redorange应返回false,搜索orange_red应返回true。

5 个答案:

答案 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
}