Вопрос регулярного выражения - PullRequest
0 голосов
/ 04 сентября 2010

У меня есть содержимое, похожее на

<div class="c2">
<div class="c3">
<p>...</p>
</div>
</div>

То, что я хочу, это соответствовать внутреннему HTML-файлу div.c2.Содержание этого может сильно отличаться.Единственная проблема, с которой я здесь сталкиваюсь, заключается в том, как я могу заставить ее работать так, чтобы был взят правильный закрывающий div?

Ответы [ 3 ]

1 голос
/ 04 сентября 2010

Вы не можете.Эта проблема неразрешима с классическими регулярными выражениями и с большинством существующих реализаций регулярных выражений.

Однако некоторые механизмы регулярных выражений имеют специальную поддержку для сопоставления сбалансированных пар.См., Например, здесь (.NET).Хотя даже в этом случае ваше регулярное выражение сможет анализировать только подмножество синтаксически правильных текстов (например, что если < /div > встроен в комментарий?).Вам нужен HTML-анализатор для получения надежных результатов.

0 голосов
/ 04 сентября 2010

Удалить первую строку, удалить последнюю строку.Задача решена.Нет необходимости в RegEx.

Следующий шаблон хорошо работает с реализацией .Net RegEx:

\<div class="c2"\>{[\n a-z.<>="0-9/]+}\</div\>

И мы заменим это \ \

Ввод:

<div class="c2">
<div class="c3">
<p>...</p>
</div></div></div></div></div></div></div></div>
</div>

Ввод:

<div class="c3">
<p>...</p>
</div></div></div></div></div></div></div></div>
0 голосов
/ 04 сентября 2010

Есть ли шанс, что это всегда будет действительный XHTML? Если это так, то лучше проанализировать его как XML, чем пытаться переопределить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...