在PHP中查找多个TXT文件中的特定文本

时间:2011-11-07 02:57:13

标签: php file search text

我想在目录中的一个或多个文本文件中找到特定的文本字符串,但我不知道如何。我现在用谷歌搜索了很长时间,但我还没有找到任何东西。因此,我问你们我怎么解决这个问题?

提前致谢。

4 个答案:

答案 0 :(得分:10)

如果它是您正在运行的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

答案 1 :(得分:5)

您可以在不使用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;
    }
  }
}

答案 2 :(得分:3)

如果你在Linux机器上,你可以grep而不是使用PHP。对于php,您可以iterate over the files in a directoryopen each as a stringfind the string,并在字符串存在时保存文件。

答案 3 :(得分:1)

只需指定文件名,获取文件内容,并对文件内容进行正则表达式匹配。有关我的代码示例的详细信息,请参阅thisthis

    $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机器,都可以使用。