Фильтровать полезные данные из входного файла

0

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

!bla bla
more bla
some useless data
something interesting
 something interesting
 something interesting
some useless data
something interesting
 something interesting
some useless data
bla bla

Мой план состоял в том, чтобы прочитать файл с file_get_contents(), а затем использовать str_replace() чтобы заменить некоторые данные и использовать их в качестве маркеров. Затем я попытался удалить бесполезные данные с начала файла на marker1, затем с marker2 на marker3, затем с marker4 до конца файла, чтобы я получил только полезные данные на выходе (в этот момент я Я еще не уверен, что мне нужны или не нужны маркеры в данных. Я попытался использовать strstr() но не смог заставить его работать.

    !bla bla
    more bla
    some useless data
    ==marker1==
    something interesting
     something interesting
     something interesting
    ==marker2==
    some useless data
    ==marker3==
    something interesting
     something interesting
    ==marker4==
    some useless data
    bla bla

Я буду использовать explode() чтобы передать полученные полезные данные в мою базу данных.

EDIT: Ну, я решил это так.

preg_match('/(==marker1==)(.*?)(==marker2==)/s', $input, $marker1to2);
$marker1to2 = trim($marker1to2[2]); 
$marker1to2 = preg_replace('/something /', '==marker1== something ', $marker1to2, 1); 
echo $marker1to2;
Теги:

1 ответ

0

Вам нужны регулярные выражения:

$data = "!bla bla
more bla
some useless data
==marker1==
something interesting
 something interesting
 something interesting
==marker2==
some useless data
==marker3==
something interesting
 something interesting
==marker4==
some useless data
bla bla";

preg_match("/(==marker1==)(.*)(==marker2==)/s", $data, $marker1to2);
$marker1to2 = trim($marker1to2[2]);

preg_match("/(==marker3==)(.*)(==marker4==)/s", $data, $marker3to4);
$marker3to4 = trim($marker3to4[2]);

echo "Marker 1 to 2:\n$marker1to2\n\n";
echo "Marker 3 to 4:\n$marker3to4\n\n";

Вывод:

Marker 1 to 2:
something interesting
something interesting
something interesting

Marker 3 to 4:
something interesting
something interesting
  • 0
    Это работает на вашем примере, но когда я пытаюсь применить тот же принцип к моим данным, ничего не происходит. Есть ли другой простой подход к этому? Может быть, что-то с strstr ()? Я попытался найти что-то, что будет работать как strstr ($ data, $ from_marker1, $ to_marker2), но не повезло. :)
  • 1
    Можете ли вы опубликовать некоторые реальные данные, пожалуйста? Я снова проверю свое регулярное выражение с реальными данными.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню