Обычно считается плохой практикой пытаться анализировать HTML / XML с помощью RegEx именно потому, что он иерархический. Вы МОЖЕТЕ использовать рекурсивную функцию для этого, но лучшим решением в этом случае является использование настоящего парсера XML. Я не мог бы дать вам лучший совет, чем тот, не зная платформу, которую вы используете.
РЕДАКТИРОВАТЬ: Regex также очень медленно, что является еще одной причиной, по которой он плохо обрабатывает HTML; тем не менее, я не знаю, что процессор XML / DOM, вероятно, будет быстрее, поскольку он, вероятно, будет использовать намного больше памяти.
Если вам просто нужны данные из простого документа, который вы продемонстрировали, и / или если вы хотите создать решение самостоятельно, это не так сложно сделать. Просто создайте простой рекурсивный потоковый процессор на основе состояний, который ищет теги и передает содержимое на следующий рекурсивный уровень.
Например:
- In a recursive function, seek out a "<" character.
- Now find a ">" character.
- Preserve everything you find until the next "<" character.
- Find a ">" character.
- Pass whatever you found between those tags into the recursive function.
Вам придется самостоятельно проверять ошибки, но базовый случай (когда вы возвращаетесь обратно на предыдущий уровень) - это когда вам больше нечего найти.
Может быть, это помогает, а может и нет. Удачи тебе.