Найти конкретный текст в нескольких файлах TXT в PHP - PullRequest
7 голосов
/ 07 ноября 2011

Я хочу найти определенную текстовую строку в одном или нескольких текстовых файлах в каталоге, но я не знаю как.Я уже давно гуглил и ничего не нашел.Поэтому я спрашиваю вас, ребята, как я могу это исправить?

Заранее спасибо.

Ответы [ 4 ]

11 голосов
/ 07 ноября 2011

Если вы используете хост Unix, вы можете сделать системный вызов grep в каталоге:

$search_pattern = "text to find";
$output = array();
$result = exec("/path/to/grep -l " . escapeshellarg($search_pattern) . " /path/to/directory/*", $output);

print_r($output);
// Prints a list of filenames containing the pattern
5 голосов
/ 07 ноября 2011

Вы можете получить то, что вам нужно, без использования grep.Grep - удобный инструмент, когда вы находитесь в командной строке, но вы можете делать все, что вам нужно, с помощью небольшого кусочка PHP-кода.

Этот небольшой фрагмент, например, дает результаты, аналогичные grep:

$path_to_check = '';
$needle = 'match';

foreach(glob($path_to_check . '*.txt') as $filename)
{
  foreach(file($filename) as $fli=>$fl)
  {
    if(strpos($fl, $needle)!==false)
    {
      echo $filename . ' on line ' . ($fli+1) . ': ' . $fl;
    }
  }
}
3 голосов
/ 07 ноября 2011

Если вы используете Linux, вы можете grep вместо использования PHP. В частности, для php вы можете перебирать файлы в каталоге , открывать каждый как строку , найти строку и сохранить файл, если строка существует ,

1 голос
/ 07 ноября 2011

Просто укажите имя файла, получите его содержимое и выполните регулярное выражение в соответствии с содержимым файла. См. this и this для получения дополнительной информации о моем примере кода ниже:

    $fileName = '/path/to/file.txt';
    $fileContents = file_get_contents($fileName);
    $searchStr = 'I want to find this exact string in the file contents';

    if ($fileContents) {  // file was retrieved successfully

        // do the regex matching
        $matchCount = preg_match_all($searchStr, $fileContents, $matches);

        if ($matchCount) {  // there were matches
            // $match[0] will contain the entire string that was matched
            // $matches[1..n] will contain the match substrings    
        }

    } else {  // file retrieval had problems

    }

Примечание. Это будет работать независимо от того, работаете ли вы в Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...