В чем проблема с этим регулярным выражением? - PullRequest
1 голос
/ 17 августа 2010

Во-первых, я не эксперт по регулярным выражениям, поэтому я почти уверен, что делаю что-то не так.

Вот мое регулярное выражение:

<(list)(\b[^>]*)>(<\1\b[^>]*>.*?<\/\1>|.)*?<\/\1>

Это входная строка:

...
<list title="Lorem ipsum dolor sit amet, consectetur adipiscing elit...">
<li>
    <list title="Lorem adipiscing...">
        <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit</li>
        <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit</li>
    </list>
</li>
<li>
     <list title="Lorem ipsum...">
        <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit</li>
    </list>
</li>
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit
</li>
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit
</li>
</list>
...

Я хочу сопоставить внешний <list> и перехватить весь контент, включая интертал <list>, но когда я пытаюсь прочитать группу, \3 пусто, хотя группы \1 и \2 в порядке. *

Любые идеи будут очень признательны.

1 Ответ

6 голосов
/ 17 августа 2010

Эта проблема не может быть решена с помощью совпадения с регулярным выражением.Шутки в сторону.Я не просто повторяю догму «не разбирай HTML с регулярным выражением»;регулярные выражения логически не способны обрабатывать вложенные теги (что , почему все говорят "не анализируйте HTML с помощью регулярных выражений")

Лучшая идея, которую я могу вам дать, - это использовать анализатор XML,Если вы будете настаивать на решении этой проблемы с помощью регулярных выражений, вы все равно будете писать свой собственный синтаксический анализатор с рекурсивным спуском, так что вы могли бы также воспользоваться преимуществами работы, уже проделанной с этой проблемой.

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