我想在目录中的一个或多个文本文件中找到特定的文本字符串,但我不知道如何。我现在用谷歌搜索了很长时间,但我还没有找到任何东西。因此,我问你们我怎么解决这个问题?
提前致谢。
答案 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 directory,open each as a string,find the string,并在字符串存在时保存文件。
答案 3 :(得分:1)
只需指定文件名,获取文件内容,并对文件内容进行正则表达式匹配。有关我的代码示例的详细信息,请参阅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机器,都可以使用。