Прежде чем кто-либо спросит, я не делаю никаких скраппингов.
Я пытаюсь разобрать строку html, чтобы найти div с определенным идентификатором. Я не могу на всю жизнь заставить это работать. Следующее выражение сработало в одном случае, но не в другом. Я не уверен, имеет ли это отношение к дополнительным элементам в HTML или нет.
<div\s*?id=(\""|"|")content(\""|"|").*?>\s*?(?>(?! <div\s*?> | </div> ) | <div\s*?>(?<DEPTH>) | </div>(?<-DEPTH>) | .?)*(?(DEPTH)(?!))</div>
Он правильно находит первый div с правильным идентификатором, но затем закрывается в первом закрывающем div, а не в соответствующем div.
<div id="firstdiv">begining content<div id="content">some other stuff
<div id="otherdiv">other stuff here</div>
more stuff
</div>
</div>
Это должно вернуть
<div id="content">some other stuff
<div id="otherdiv">other stuff here</div>
more stuff
</div>
, но по какой-то причине это не так. Возвращаем:
<div id="content">some other stuff
<div id="otherdiv">other stuff here</div>
У кого-нибудь есть более простое выражение, чтобы справиться с этим?
Для пояснения, это в .NET, и я использую ключевое слово DEPTH. Вы можете найти более подробную информацию здесь .