#!/usr/bin/perl -w package Filter; use strict; use base 'HTML::Parser'; my ($filter, %ok_tags); my @ok_tags = qw ( i b ); @ok_tags{@ok_tags} = @ok_tags; sub start { my ($self, $tag, $attr, $attrseq, $origtext) = @_; $filter .= exists $ok_tags{$tag} ? $origtext : 'x'; } sub text { my ($self, $text) = @_; $filter .= $text; } sub comment { my ($self, $comment) = @_; $filter .= $comment; } sub end { my ($self, $tag, $origtext) = @_; $filter .= $ok_tags{$tag} ? $origtext : 'x'; } my $html = join '', ; my $parser = new Filter; $parser->parse($html); $parser->eof; print $filter; __DATA__ Foo This regex is broken It will cope with this But not this< /b> told youtsroken