URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5822
[ Назад ]

Исходное сообщение
"Регулярное выражение для рекурсивных вложений."

Отправлено tower , 16-Окт-06 15:36 
Здраствуйте.

Пытаюсь подобрать регулярное выражение на Перле для нахождения "внешнего совпадения".
Тоесть для текста "<p>111<p>111</p>111<p>111</p></p>" нужно выбрать то что находится между тегами <p> и </p> . Для "обычного" выражения /<p>(.*?)<\/p>/ результат не тот что надо. Получается 111<p>111  , а надо 111<p>111</p>111<p>111</p>.
Нужно чтоб перл находил не первое совпадение </p> а последнее.

Как ?


Содержание

Сообщения в этом обсуждении
"Регулярное выражение для рекурсивных вложений."
Отправлено ihor , 17-Окт-06 19:41 
/<p>(.+)<\/p>/


"Регулярное выражение для рекурсивных вложений."
Отправлено mrwel , 18-Окт-06 06:07 
>Здраствуйте.
>
>Пытаюсь подобрать регулярное выражение на Перле для нахождения "внешнего совпадения".
>Тоесть для текста "<p>111<p>111</p>111<p>111</p></p>" нужно выбрать то что находится между тегами <p> и </p> . Для "обычного" выражения /<p>(.*?)<\/p>/ результат не тот что надо. Получается 111<p>111  , а надо 111<p>111</p>111<p>111</p>.
>Нужно чтоб перл находил не первое совпадение </p> а последнее.
>
>Как ?


/^<p>(.*?)<\/p>$/

Вроде так. Строка начинается на <p>, оканчивается на </p>


"Регулярное выражение для рекурсивных вложений."
Отправлено tower , 19-Окт-06 09:53 
Спасибо за ответы, но ни тот ни другой не подходит.

/<p>(.+)<\/p>/ просто найдет подстроки где между <p> и <\/p> есть больше одного символа.

А этот /^<p>(.*?)<\/p>$/ тоже не подходит. Текст может быть и такой "bla<p>111<p>111</p>111<p>111</p></p>bla"

Я уже нашел один вариант.
##STARTBLOCK\[([0-9])(,([0-9]))?\]##((?!.*##STARTBLOCK).*?)##ENDBLOCK##
/<p>((?!.*</p>).*?)<\/p>/
Это выражение находит парные теги, но начиная из внутренних пар, а мне нужно внешние пары находить.