Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Технологии: Разные > вопрос по регулярному выражению


Автор: Forza 23.8.2008, 17:46
Не нашёл специального форума по регулярным выражениям, поэтому пишу сюда.

Предположим, есть следующий ХТМЛ-код:
Код

aaa
<b>bbb</b>
ccc
<form>
ddd
<b>eee</b>
fff
<b>ggg</b>
</form>
hhh
<b>iii</b>


С помощью регэкспов надо достать из него жирные символы, находящиеся внутри тэга формы, т.е. в нашем случае это будет eee и ggg. Считаем, что такая форма в тексте одна.
Пока я смог это сделать только с помощью двух итераций с регэкспами:
Код

my $rez1 = ($content =~ /<form>(.+?)<\/form>/sg)[0]; #извлекаем всё содержимое формы как один скаляр
my @rez2 = ($rez1 =~ /<b>(.+?)<\/b>/sg); #из полученного выше извлекаем массив жирных подстрок


А можно ли это сделать, используя регэксп один раз? Пока в голову пришло только нижеследующее: 
Код

my @rez3 = ($content =~ /<form>.+?<b>(.+?)<\/b>.+?<\/form>/sg);


Логика была такая: а дай-ка мне все символы, которые окружены тэгами bold, а также где-то дальше от них есть и тэги открытия/закрытия формы. Но оно выдаёт только eee. Наверное, дело в том, что для eee и ggg найденные результаты пересекались бы.

Look ahead/behind использовать нельзя, т.к. они не поддерживают переменную длину.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)