Регулярные выражения
От: alexxx50  
Дата: 31.07.06 17:56
Оценка:
Здравствуйте
Подскажите что не так в моем выражение, что то запутался я,нужно находить блоки текста в HTML документе
Пример блоков:
%IF% %PROGADDED%
gdfgcvmnbvgf
%ENDIF%

%IF% %PROGNOCATEGORY%
%CATEGORYS%
gdfgcvmnbvgf
%ENDIF%

написал следующее
(\%IF\%)\s*(\%[^\%]+\%)([^\%])|(\%[^E]+)(\%ENDIF\%)

но работакт что то неправильно.
Re: Регулярные выражения
От: MBy  
Дата: 31.07.06 18:33
Оценка: 3 (1)
Здравствуйте, alexxx50, Вы писали:

A>но работакт что то неправильно.


А нужно взять именно такой блок или текст в нём?
Во-втором случае, такое вот работает:

#!perl

$_ = '%IF% %PROGNOCATEGORY% %CATEGORYS% sometext... %ENDIF%';

m/%IF%
  (?:
    \s*
    %[^%]+%
    \s*
  )*
  (.*?)
  %ENDIF%
 /x;

print $1;
Re[2]: Регулярные выражения
От: alexxx50  
Дата: 31.07.06 19:05
Оценка:
Здравствуйте, MBy, Вы писали:

MBy>А нужно взять именно такой блок или текст в нём?


нужно что бы на выходе было так:
$1 = IF
$2 = PROGNOCATEGORY
$3 = %CATEGORYS% gdfgcvmnbvgf
$4 = ENDIF
Re[3]: Регулярные выражения
От: MBy  
Дата: 01.08.06 09:55
Оценка:
Здравствуйте, alexxx50, Вы писали:

MBy>>А нужно взять именно такой блок или текст в нём?


A>нужно что бы на выходе было так:

A>$1 = IF
A>$2 = PROGNOCATEGORY
A>$3 = %CATEGORYS% gdfgcvmnbvgf
A>$4 = ENDIF

На для именно такого блока вот такой код работает:

#!perl

$_ = '%IF% %PROGNOCATEGORY% %CATEGORYS% sometext... %ENDIF%';

m/%([^%]+)% \s*
  %([^%]+)% \s*
  (%[^%]+% .*) \s*
  %([^%]+)%
 /x;

print "$1\n$2\n$3\n$4";
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.