in reply to Reg Ex Problem: Changing width dimension in HTML table

Sorry to be blunt, but if you can find the bug in the following regex, you can go ahead and parse HTML with regexes :)

$data =~ s/(<a\s(?:[^>](?!href))*href\s*)(&#61;\s*(&[^;]+;)?(?:.(?!\3))+(?:\3)?)([^>]+>)/$1.decode_entities($2).$4/gsei;

Otherwise, use a parser. It's more work to set up, but it's more likely to be correct.

use HTML::TokeParser::Simple; my $html =<<'END_HTML'; <table width="200"> <tr> <td>foo</td> </tr> </table> END_HTML my $parser = HTML::TokeParser::Simple->new(\$html); my $new_html = ''; while (my $token = $parser->get_token) { $new_html .= $token->is_start_tag('table') ? new_width_attribute($token) : $token->as_is; } print $new_html; sub new_width_attribute { my $token = shift; my ( $attr, $attrseq ) = ($token->return_attr, $token->return_attr +seq); $attr->{ width } = '300'; my $tag = ''; foreach ( @$attrseq ) { $tag .= qq{$_="$attr->{$_}"}; } $tag = "<table $tag>"; return $tag; }

(This is such a common request that I need to push this into the module).

Cheers,
Ovid

New address of my CGI Course.
Silence is Evil (feel free to copy and distribute widely - note copyright text)

Replies are listed 'Best First'.
Re: Re: Reg Ex Problem: Changing width dimension in HTML table
by nysus (Parson) on May 20, 2003 at 19:25 UTC
    Hey, thanks. And your answer uncovers a very stubborn problem for stubborn new programmers like me who tend to do the quick and dirty because we haven't been burned enough to take the time to do it right. I'll look into the toke parser module.

    $PM = "Perl Monk's";
    $MCF = "Most Clueless Friar Abbot Bishop";
    $nysus = $PM . $MCF;
    Click here if you love Perl Monks

      You don't give yourself enough credit. It's not just new programmers who are stubborn. In Stubborn as a Saint, I pointed out how I tend to take the first answer and run with it. I've seen plenty of other programmers do the same thing. Stubborness, I think, is not a function of ability. Rather, it's a function of false pride. When someone is willing to let go of an unworkable position, that person becomes a better programmer (and possibly a better person, too -- I'm still working on that aspect).

      Cheers,
      Ovid

      New address of my CGI Course.
      Silence is Evil (feel free to copy and distribute widely - note copyright text)