У меня есть база данных, содержащая миллионы элементов. Эти элементы должны быть экспортированы через веб-интерфейс. Клиент может указать шаблон (строку) с заполнителями о том, как экспортировать данные.Поток HTTP-ответа анализируемого шаблона, включая циклы
Поскольку массивы данных имеют большой размер, я не могу выполнить простой поиск/замену шаблона и отправить результат как ответ, так как это избавит меня от памяти. Поэтому я передаю ответ через Transfer-Encoding: chunked.
Шаблон может выглядеть следующим образом:
Some static content at the beginning …
[foreach item]{item.id} {item.name}[/foreach]
Some static content in between the loops …
[foreach item]{item.id} {item.value}[/foreach]
Some static content at the end …
Как я могу транслировать это последовательно? Если бы была только одна петля foreach, я мог бы просто разделить процесс потоковой передачи в три этапа:
- Поток контента перед циклом по строкам.
- Итерации через цикл и поток каждого пункта по строкам.
- Поток содержимого после цикла по строкам.
Однако шаблон может содержать 0..n циклов foreach (в соответствии с одним и тем же списком элементов). Есть ли регулярное выражение для извлечения всех циклов и содержимого между ними, чтобы я мог перебирать их?