Поиск в файле всех строк, соответствующих шаблону

Задача
Необходимо найти в файле все строки, соответствующие шаблону.

Решение
Прочитайте файл в массив и примените функцию preg_grep().

Обсуждение
Есть два способа сделать это. Рассмотрим тот, что побыстрее:

$pattern = "/\bo'reilly\b/i"; // только книги издательства O'Reilly
$ora_books = preg_grep($pattern, file('/path/to/your/file.txt'));

Используйте команду file() для автоматической загрузки каждой строки файла в отдельный элемент массива и функцию preg_grep() для отфильтровывания неподходящих строк.

Приведем более эффективный способ:

$fh = fopen('/path/to/your/file.txt', 'r') or die($php_errormsg);
while (!feof($fh)) {
$line = fgets($fh, 4096);
if (preg_match($pattern, $line)) { $ora_books[] = $line; }}
fclose($fh);

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

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Выбор между поглощающим и непоглощающим сравнением
Нахождение n-го совпадения
Переход от ereg к preg
Поиск слов
Проверка правильности адресов электронной почты

Вернуться в раздел: PHP / 13. Регулярные выражения