Schrift
[thread]136[/thread]

alle image sources aus html datei rausfiltern



<< >> 8 Einträge, 1 Seite
kölsch
 2004-01-07 19:58
#763 #763
User since
2003-10-02
66 Artikel
BenutzerIn
[default_avatar]
Ok, also ich will aus einer gegebenen html Datei die Quellen aller Bilder untereinander ausgeben.

Bis jetzt:
Code: (dl )
1
2
3
4
5
foreach (@lines) {   # quelltext @lines eingelesen
if ($_ =~ /<img/) {
print $_;
}
}


Bis jetzt hab ich nur die Zeilen in denen ein <img vorkommt. Wie krieg ich aber daraus die quelle? Also was in src="" steht.

Danke, Gruß
renee
 2004-01-07 20:13
#764 #764
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
$zeile =~ /<img[^>]+src="([^"]+)/;
$source = $1;
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/
kölsch
 2004-01-07 20:27
#765 #765
User since
2003-10-02
66 Artikel
BenutzerIn
[default_avatar]
Danke, funktioniert!

Was ist das $1? Wieso steht da das Ergebnis drin?
renee
 2004-01-07 20:43
#766 #766
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
da steht das Ergebnis drin, weil in dem ersten Ausdruck die runden Klammern () benutzt werden...

siehe perldoc perlvar:
Code: (dl )
1
2
3
4
5
6
 $<*digits*>
Contains the subpattern from the corresponding set of capturing
parentheses from the last pattern match, not counting patterns
matched in nested blocks that have been exited already.
(Mnemonic: like \digits.) These variables are all read-only and
dynamically scoped to the current BLOCK.
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/
havi
 2004-01-08 08:49
#767 #767
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Zum besseren Verstaendnis...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl

use warnings;
use strict;

my $string = "111222333";

$string =~ m/(\d{3})(\d{3})(\d{3})/;

print "$1\n$2\n$3\n";


Einfach kopieren, einfuegen, usw. und ausfuehren...

Gruss
kölsch
 2004-01-08 12:08
#768 #768
User since
2003-10-02
66 Artikel
BenutzerIn
[default_avatar]
Also geht dir Nummer nach dem $ nach der Anzahl der Klammern in der regex..

Ok, dank euch!
havi
 2004-01-08 12:18
#769 #769
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Genau!
$1 = 1. Klammerpaar
$2 = 2. Klammerpaar
usw.

Gruss
pq
 2004-01-08 15:46
#770 #770
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
und wenn du es richtig machen willst, benutzt du, um HTML zu parsen, keine regex,
sondern ein modul. es heisst, oh wunder, HTML::Parser.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
use HTML::Parser ();
my $p = HTML::Parser->new(
 api_version => 3,
 start_h => [\&start, "tagname, attr"],
 marked_sections => 1,
);
$p->parse_file("datei.html");
sub start {
 print "$_[1]->{src}" if $_[0] eq "img"
}
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 8 Einträge, 1 Seite



View all threads created 2004-01-07 19:58.