XHTML будет легче анализировать с помощью XML-анализатора, чем с помощью регулярного выражения. Я знаю, что это не то, что вы спрашиваете, но анализатор XML сможет быстро перейти к узлу тела и вернуть вам его содержимое без каких-либо проблем с отображением тегов, которые дает вам регулярное выражение.
EDIT:
В ответ на комментарий здесь; что синтаксический анализатор XML слишком медленный.
Существует два вида синтаксического анализатора XML, один из которых называется DOM, он большой и тяжелый, простой и удобный, он строит дерево документа, прежде чем что-либо делать. Другой называется SAX, он быстрый и легкий и требует больше работы, он читает файл последовательно. Вы хотите, чтобы SAX нашел тег Body.
Метод DOM хорош для многократного использования, извлечения тегов и определения того, кто является тем, кто является ребенком. Синтаксический анализатор SAX читает файлы по порядку и быстро получает нужную информацию. Regex не будет работать быстрее, чем SAX-парсер, потому что они оба просто перебирают совпадение файлов и шаблонов, за исключением того, что регулярное выражение не перестает смотреть после того, как обнаружило тег body, потому что регулярное выражение не имеет встроенного знание XML. Фактически, ваш синтаксический анализатор SAX, вероятно, использует небольшие кусочки регулярного выражения для поиска каждого тега.