2012-05-19 7 views
7

PHPには、unix/linuxシステムでgrep -f filenameを実行する関数がありますか? 何もない場合、このためにカスタマイズされたメソッド/関数を作成するのにどのPHP関数/ツールが役立つでしょうか?ありがとう!grep with -f like PHPで

答えて

9

実はIMHO、私はそれは次のようだと言うだろう:

$result = preg_grep($pattern, file($path)); 

preg_grep­Docsfile­Docsを参照してください。

あなたはファイルのセットの上に(再帰的に)それを行うために必要がある場合は、そこglobforeachまたは(RecursiveDirectoryIteratorまたはGlobIterator­DocsもあるとRegexIterator­Docsを忘れないように。


SplFileObjectRegexIterator有する:

$stream = new SplFileObject($file); 
$grepped = new RegexIterator($stream, $pattern); 

foreach ($grepped as $line) { 
    echo $line; 
} 

出力($パターンを含む$fileの全ライン):

$grepped = new RegexIterator($stream, $pattern); 
foreach ($grepped as $line) { 
    echo $line; 
} 

デモ:https://eval.in/208699

+0

これは機能的には同等ですが、ファイル全体をメモリにロードしますが、コマンドラインのgrepはロードしません。 – cmc

+0

@cmd:はい、メモリを節約したい場合は、[** SplFileObject **](http://php.net/SplFileObject)と[** RegexIterator **](http://php.net/ RegexIterator)。 – hakre

+0

いいね! ...あなたはpreg_grep($ pattern、file($ path))のドロップイン置換である例を手にしたことはありませんか? – cmc

2

ファイルを開くにはfile_get_contens()関数を、正規表現を使用してコンテンツを取得するにはpreg_match_all()関数を組み合わせることができます。

$file = file_get_contents ('path/to/file.ext'); 
preg_match_all ('regex_pattern_here', $file, $matches); 
print_r ($matches); 
+0

私は 'file_get_contents()'を使用していましたが、断続的に失敗します。 – FractalSpace