Регулярное выражение захватывает слишком много текста

Рейтинг: 5Ответов: 1Опубликовано: 09.09.2014

Есть HTML

<table>
....
<!--ID 25--></table>

<table>
....
<!--ID 26--></table>

Регулярка

<table>(.*)<!--ID [0-9]{0,4}--></table>

возвращает полностью код, содержащий 2 таблицы сразу.
Как запросить, чтобы регулярка вернула каждую таблицу по отдельности?

Ответы

▲ 9Принят

Надо уменьшить жадность квантификатора, то есть заменить * ("жадная" версия) *? ("ленивой" версией). Вот так:

<table>(.*?)<!--ID [0-9]{0,4}--><\/table>
         ^^

Или (если библиотека регулярных выражений не поддерживает модификатор DOTALL)

<table>([\s\S]*?)<!--ID [0-9]{0,4}--><\/table>
        ^^^^^^^^

Посмотреть пример работы