Я пытаюсь захватить определенные части HTML с помощью регулярных выражений, и я столкнулся с ситуацией, которую я не знаю, как решить.
У меня есть фрагмент HTML, подобный этому:
<span ...> .... <span ...> ... </span> ... </span>
Итак, элемент <span>
, в который вложен другой элемент <span>
.
Я успешно использовал следующее регулярное выражение (в PHP preg_match()
/ preg_match_all()
) для захвата целых элементов HTML:
@<sometag[^>]+>.*?</sometag>@
Это будет захватывать заданный начальный тег и все, вплоть до закрывающего тега того же типа.
Однако в описанной выше ситуацииэто захватило бы начальный <span>
и все до следующего закрытия </span>
, с которым я столкнулся, так что я получаю следующее:
<span ...> .... <span ...> ... </span>
, то есть внешний начальный тег,затем все до начального тега внутреннего диапазона, затем все до закрывающего тега внутреннего диапазона, что, конечно, не то, что я хочу.
Что я действительно хотел, так это внешний элемент <span>
, полный всего, что внутри него, включая внутреннее вложенное <span>
.
Есть ли какой-нибудь практический способ достичь этого?
Примечание: синтаксический анализ HTML с использованием синтаксического анализатора XML, вероятно, не подходит, так как HTML-код, над которым я работаю, является старым и очень сломанным HTML 4, выходящим из MS FrontPage, который может задушить любой анализатор.1033 * Спасибо за любую помощь!