php проблема поиска слов в текстовом файле - PullRequest
2 голосов
/ 27 июня 2011

Я использую следующий код для поиска в текстовом файле:

$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.

Ответы [ 5 ]

1 голос
/ 27 июня 2011

Это самый простой / быстрый способ, которым я могу придумать:

$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 возвращает целое число, обозначающее количество раз, когда образец был найден (который будет либо 0, либо 1, так как preg_match останавливается после первого совпадения - используйте preg_match_all, чтобы получить точный счетчик того, сколько раз образец появляется в цель).

1 голос
/ 27 июня 2011
$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";

Мех, немного менее эффективно, но он выполняет свою работу.

1 голос
/ 27 июня 2011

Разбить строку на массив, используя explode. Затем выполните поиск в массиве, используя array_search, чтобы увидеть, содержит ли оно ваше точное слово.

0 голосов
/ 27 июня 2011

Попробуйте, разделите данные на пробелы и посмотрите, находится ли запрос в массиве.

$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";
}
0 голосов
/ 27 июня 2011

Попробуйте использовать 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...