Я хотел бы отсканировать большой фрагмент текста с помощью PHP и найти все совпадения для шаблона, а затем также 2 строки выше совпадения и 2 строки ниже.
Мой текст выглядит следующим образом, но с некоторым дополнительным ненужным текстом выше и ниже этого образца:
1
Текст описания
123.456.12
10,00
10,00
3
Другой текст описания
234.567.89
10,00
30,00
# Некоторый текст нижнего колонтитула, который не нужен и будет меняться для каждого текстового файла #
15
текст описания
564.238.02
4,00
60,00
15
текст описания
564.238.02
4,00
60,00
# Некоторый текст нижнего колонтитула, который не нужен и будет меняться для каждого текстового файла #
15
Больше текста описания
564.238.02
4,00
60,00
15
Подробнее текст описания
564.238.02
4,00
60,00
Используя PHP, я ищу соответствие каждому числу, выделенному жирным шрифтом (всегда одинаковый формат - 3 цифры, точка, 3 цифры, точка, 2 цифры) , но затем также возвращает предыдущие 2 строки и следующую 2 строки и, надеюсь, вернут массив, чтобы я мог использовать:
$contents[$i]["qty"] = "1";
$contents[$i]["description"] = "Description text";
$contents[$i]["price"] = "10.00";
$contents[$i]["total"] = "10.00";
и т.д ...
Возможно ли это и буду ли я использовать регулярные выражения? Буду признателен за любую помощь или совет!
Спасибо
ОТВЕТИТЬ vzwick
Это мой последний код, который я использовал:
$items_array = array();
$counter = 0;
if (preg_match_all('/(\d+)\n\n(\w.*)\n\n(\d{3}\.\d{3}\.\d{2})\n\n(\d.*)\n\n(\d.*)/', $text_file, $matches)) {
$items_string = $matches[0];
foreach ($items_string as $value){
$item = explode("\n\n", $value);
$items_array[$counter]["qty"] = $item[0];
$items_array[$counter]["description"] = $item[1];
$items_array[$counter]["number"] = $item[2];
$items_array[$counter]["price"] = $item[3];
$items_array[$counter]["total"] = $item[4];
$counter++;
}
}
else
{
die("No matching patterns found");
}
print_r($items_array);