Вы также захотите учесть другие вещи перед занятием в теге div
<div[^>]*class="footer"[^>]*>(.*?)</div>
Кроме того, учитывайте регистр. Возможно, вам придется избежать таких вещей, как кавычки или косая черта в закрывающем теге. В каком контексте вы это делаете?
Также обратите внимание, что анализ HTML с помощью регулярных выражений может быть очень неприятным, в зависимости от ввода. Хороший вопрос поднят в ответе ниже - предположим, у вас есть такая структура:
<div>
<div class="footer">
<div>Hi!</div>
</div>
</div>
Попытка построить регулярное выражение для этого - путь к катастрофе. Лучше всего загрузить документ в DOM и выполнить с ним манипуляции.
Псевдокод, который должен быть тесно связан с XML :: DOM:
document = //load document
divs = document.getElementsByTagName("div");
for(div in divs) {
if(div.getAttributes["class"] == "footer") {
parent = div.getParent();
for(child in div.getChildren()) {
// filter attribute types?
parent.insertBefore(div, child);
}
parent.removeChild(div);
}
}
Вот библиотека Perl,
HTML :: DOM , и другая,
XML :: DOM
.NET имеет встроенные библиотеки для обработки dom-анализа.