in reply to Regex question: Is there a better way?

From the HTML::LinkExtor POD...
use LWP::UserAgent; use HTML::LinkExtor; use URI::URL; $url = "http://www.perl.org/"; # for instance $ua = LWP::UserAgent->new; # Set up a callback that collect image links my @imgs = (); sub callback { my($tag, %attr) = @_; return if $tag ne 'img'; # we only look closer at <img ...> push(@imgs, values %attr); } # Make the parser. Unfortunately, we don't know the base yet # (it might be diffent from $url) $p = HTML::LinkExtor->new(\&callback); # Request document and parse it as it arrives $res = $ua->request(HTTP::Request->new(GET => $url),sub {$p->parse($_[ +0])}); # Expand all image URLs to absolute ones my $base = $res->base; @imgs = map { $_ = url($_, $base)->abs; } @imgs; # Print them out print join("\n", @imgs), "\n";

Greetz
Beatnik
... Quidquid perl dictum sit, altum viditur.

Replies are listed 'Best First'.
Re: Re: Regex question: Is there a better way?
by Xxaxx (Monk) on Apr 22, 2001 at 23:25 UTC
    Thanks for the HTML::LinkExtor solution.
    This will accomplish the task of expanding the image urls.

    But, alas, I'm trying to expand my regex ability.
    It might be that there isn't a regex that will process expressions with not "http and not "/. But that's what I'm looking for.

    my $content =<<"(END)"; jfds k blah="http:/stufff" fjksldf jsdf jsdlfjs jflds fjsf jfdj blah="/some other stuff" fjsd fjslf s fjs fjs fjsfj fjsd jjfd jfdjlkf blah="stuff I'm lookig for" fjdls fsf sjfks (END)
    Is there a regex that will focus on blah="stuff I'm lookig for" and skip over blah="http:/stufff" and blah="/some other stuff"?

    Thanks
    Claude

      Your problem here is that you need to ignore quotes like:

      HREF="http://whatever" target="blank"

      being picked up. First you need to strip the HTML.

      Then run a reg exp on what's left that suit's your needs. If you're sure all quotes are 'well formed' (ie they each quote is closed), you can use something as simple as:

      /"([^"]*?)"/g

      Is this more helpful?

      cLive ;-)