PHP

Чтение записей с шаблоном-разделителем

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

Решение
Прочитайте весь файл в строку, а затем выделите из нее регулярное выражение:

$filename = '/path/to/your/file.txt';
$fh = fopen($filename, 'r') or die($php_errormsg);
$contents = fread($fh, filesize($filename));fclose($fh);
$records = preg_split('/[0-9]+\) /', $contents);


Обсуждение
Этот пример разделяет нумерованный список на части и помещает отдельные элементы списка в элементы массива. Поэтому если есть такой список:

1) Go
..
del
2) Escher
3) Bach

то в результате работы примера получается массив из четырех элементов с пустым первым элементом. Дело в том, что функция preg_split() предполагает наличие разделителей между элементами, но в данном случае элементы предваряются числами:

Array
(
[0] =>
=> Go
..
del
=> Escher
=> Bach
)


Это можно рассматривать как дополнительную функциональность, а не как ошибку, поскольку теперь n-й элемент массива содержит n-й элемент списка. Но чтобы сделать массив более компактным, можно удалить первый элемент:

$records = preg_split('/[0-9]+\) /', $contents);
array_shift($records);


Можно также выполнить другое преобразование, а именно удалить из всех элементов символ новой строки и заменить его пустой строкой:

$records = preg_split('/[0-9]+\) /', str_replace("\n",'',$contents));
array_shift($records);

PHP не позволяет изменить при вводе записей разделитель на что-нибудь другое, кроме символа новой строки, поэтому данный прием также полезен при поиске отдельных записей, разделенных переводами строки. Однако если вы просто разделяете записи внутри одной строки, то следует предпочесть более эффективную функцию explode(), а не
preg_split().
Теги:
регулярные выражения
Добавлено: 22 Июля 2018 15:50:07 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...