Forum Webscript.Ru

Программирование => Perl => Тема начата: Elenka от 11 Декабря 2006, 01:09:08

Название: вопрос по регекспам
Отправлено: Elenka от 11 Декабря 2006, 01:09:08
есть HTML-код, нужно удалить все теги кроме заранее заданных...

ну к примеру

$text=~s/<(\\/)?(img|p|br)[^>]*?//ig;

удаляет теги img, p, br, НО как сделать обратное ? тобишь оставить только эти теги, а остальные выкинуть?

про модули парсинга хтмл итд спасибо, за совет читать ман тоже заранее благодарю :)
Название: вопрос по регекспам
Отправлено: Elenka от 11 Декабря 2006, 01:13:56
единственное, что приходит на ум, так сделать не =~, a !~, но оно не работает, в регекспах КРОМЕ существует только для отдельных символов ^[img] - кроме букв i,m,g. Как сделать именно фразы, ума ни приложу
Название: вопрос по регекспам
Отправлено: ondr от 11 Декабря 2006, 09:12:15
perldoc HTML::Scrubber
Название: вопрос по регекспам
Отправлено: ctax от 11 Декабря 2006, 09:30:13
$qwe="

text


Image:


";
print $_  for grep /(])/,$qwe=~/(<.+?>)|([^<]+)/g;
Название: вопрос по регекспам
Отправлено: ravshaniy от 11 Декабря 2006, 12:53:33
хм, у меня пока тока так получилось, не оператор s///
my $tag = "(img|p|br)";
my $patern = qr/(<(?:\\/?)$tag\\b(?:.*?)>)/i;
my $text="";
while ($body =~ m/$patern/gm){ $text .= $1; }
print $text;
Название: вопрос по регекспам
Отправлено: Elenka от 11 Декабря 2006, 14:12:19
всем спасибо)
Название: вопрос по регекспам
Отправлено: Serg31416 от 25 Декабря 2006, 19:19:56
Привет.

 Вот так, наверно...

$_=\' ddd

aaa
 \';
s#<(?!(?:img|p|br))\\b[^>]*>##gi;
print;