Привет одной регуляркой не додумался как это можно сделать.
Но вот такой алгоритм пришел в голову.
Вот пример общего вида регулярки
<\w+>\s<\w+>\s?text\s?<\/\w+>\s<\/\w+>
1) Запускаете по тексту регулярку вида /(<(\w+)>\s?подставить текст сюда\s?<\/\w+>)/gim
Он должен вернуть искомый текст с самыми вложенным тегом.
2) Далее, берете найденный текст с тегами и подставляете в вот такое выражение /(<\w+>\s<raw>text</raw>\s<\/\w+>)/gim
Эта регулярка вернет строку с тегами предпоследней вложенности.
3)Повторяете вложение в цикле, пока не дойдете до тега body.
banny_name: А вам и не нужно знать название тегов. Теги определяются по <текст>текст>. Я вам в примере указал теги, чтобы наглядно было как должен работать алгоритм. Грубо говоря у вас будет цикл, который будет искать n-й тэг, n-1, n-2...1-й тег. Ну... в теории это так). Я не проверял, но предположил, что так может работать. А Чтобы алгоритм не зацикливался, вы должны в найденных строках искать тег body. Если такой есть, значит выходить из цикла.