Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7576[/thread]

Regulärer Ausdruck mehrmals pro String



<< >> 4 Einträge, 1 Seite
Gast Gast
 2005-12-26 02:30
#61368 #61368
Hallo!

Ich möchte aus einem HTML-File alle Bilder raussuchen. Dazu lese ich die Datei ein

Code: (dl )
1
2
3
open(EIN, "<test.html") or die("Kann HTML-File nicht oeffnen.\n");
@html = <EIN>;
close(EIN);


Nun wende ich folgenden regulären Ausdruck an, um alle Image-Dateinamen zu bekommen

Code: (dl )
1
2
3
4
foreach (@html)
{
if (/\<img.*src\=\"(.*)\".*\>/) { print $1, "\n"; }
}


Soweit sogut, angenommen ich hab in einer Zeile folgendes stehen

Code: (dl )
<img border="0" src="button1.jpg"><img width="100" border="0" src="button2.jpg">


dann bekomme ich nur button1.jpg zurück.

Was kann ich machen, damit ich alle Bilder (button1.jpg, button2.jpg, ...) bekomme?? Das Flag ../g hilft in diesem Fall ja auch nix (zumindest bei mir).

Danke für eure Hilfe,
Markus
renee
 2005-12-26 02:54
#61369 #61369
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Benutze für solche Sachen am besten CPAN:HTML::Parser.,..

Edit: Wiki:Mehr zu dem Modul\n\n

<!--EDIT|renee|1135558757-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2005-12-26 02:58
#61370 #61370
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#! /usr/bin/perl
use strict;
use warnings;
use HTML::Parser;

my @images;
my $string = qq~<img src="url1">xxxxxxxx <img src="url2">~;

my $p = HTML::Parser->new();
$p->handler(start => \&start_handler,"tagname,attr,self");
$p->parse($string);

print $_,"\n" for(@images);


sub start_handler{
return if(shift ne 'img');
push(@images,shift->{src});
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
coax
 2005-12-26 05:27
#61371 #61371
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Wie renee schon geschrieben hat solltest du HTML::Parser verwenden, ich will trotzdem hier mal dein technisches Problem loesen:
Entweder du verwendest den RegExp in einer while-Schleife oder du holst die Treffer in ein Array (dann funktioniert auch der g-Modifizierer).
Code: (dl )
1
2
3
4
5
6
  while( $str =~ /<img\s+.*?src=(['"])([^\1]+?)\1.*?>/g ) { # matcht Angaben in single und double quotes
     print "$2\n";
 }

 # oder
 # my(@treffer) = $str =~ /MUSTER/g;


Code: (dl )
    if (/\<img.*src\=\"(.*)\".*\>/) { print $1, "\n"; }

Du musst '<', '=', '"', '>' hier nicht escapen!\n\n

<!--EDIT|coax|1135569356-->
,,Das perlt aber heute wieder...'' -- Dittsche
<< >> 4 Einträge, 1 Seite



View all threads created 2005-12-26 02:30.