Запишем правила разбора формальным языком:
Теперь, когда задача точно описана, можно приступить к записи её в виде регулярного выражения:
Итак, у нас получилось следующее выражение:
<(\w+)[^>]*>((?:(?!</\1>).)*))</\1>
Оно захватывает любые парные теги вместе с содержимым.