Хорошо, у меня сложная проблема для вас, ребята.Извлечение определенных частей строки с предсказуемой структурой с непредсказуемым содержимым
Я пытаюсь извлечь некоторые значения из загрузки старых данных. Это куча строк, которые в основном 7 частей объединяется с ||
test1||keep||1:1||test||3462||7885||test
правил
Каждая секция строки может иметь любой характер в нем, кроме
|
или двумя стрелками например,<>
(см. ниже), которые зарезервированы как разделители.Любой из разделов может быть пустым.
например. В этом первом первом, пятом и шестом разделах пусто, а третий содержит много не буквенно-цифровых символов.
||keep||test's\ (o-kay?).go_od||test||||||test
Кроме того ...
Некоторые из строк составлены из нескольких единиц этих 7 штук, далее разделены <>
test1||keep||1:1||test||3462||7885||test<>test1||keep||1:1||test||3462||7885||test<>test1||keep||1:1||test||3462||7885||test
Помните, что любой из внутренние секции могут быть пустыми.
test54||keep||test's\ (o-kay?).go_od||test||||||<>test||keep||test545's'/.||test||||test||test
Цель
Extract только вторая часть каждой строки, и поместить в массив. В моих примерах выше, каждая часть имеет слово keep
внутри.
Так для этого примера:
||keep||test's\ (o-kay?).go_od||test||||||test
Я хочу получить:
array('keep')
И для этого примера:
test1||keep-me||1:1||test||3462||7885||test<>||keep||||||3462||7885||<>test1||keep-me-too!||1:1||test||3462||||test
Это можно рассматривать как 3 разных строк, которые разделенные <>
:
test1||keep-me||1:1||test||3462||7885||test
||keep||||||3462||7885||
test1||keep-me-too!||1:1||test||3462||||test
И я хочу, чтобы извлечь:
array('keep-me', 'keep', 'keep-me-too!')
Примечания
Я попытался сделать это с preg_match
но смотреть-за не любит поиске строк, не фиксированной длины ,
Я не могу изменить данные. Это старые данные, с которыми мне просто нужно работать.
Опубликовать ваши попытки ... –
взорваться на '<>', а затем взорвать каждую часть на '||'? – andrewsi
@andrewsi Возможно, это и должно быть. – BadHorsie