Thread Array mit allen verfügbaren Regex-Treffern (2 answers)
Opened by deanosaurier at 2010-11-01 18:55

deanosaurier
 2010-11-01 18:55
#142398 #142398
User since
2010-10-25
1 Artikel
BenutzerIn
[default_avatar]
Tag, bin ganz neu hier, erste Bitte um Hilfe, nachdem ich mich zuletzt gegen Python und für Perl entschieden hab :D. Da hab ich auch gleich schonmal die erste Supportfrage.

Ich hatte jetzt zuletzt versucht, mir mit CPAN:WWW::Mechanize ein Tool zu bauen, mit dem ich mir die Bilder einer meiner Meinung nach genialen Website auf die eigene Festplatte speichern kann. Dabei ist während des Testens jedoch ein Problem mit den regulären Ausdrücken aufgetreten, das sich auch nach Lesen von perlre oder perlretut nicht gelöst hat.

Zuerst einmal das Skript
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize;

open(DESC, ">> desc");

my $mech = WWW::Mechanize->new();

$mech->stack_depth(0);

$mech->get( 'http://epicute.icanhascheezburger.com/', ':content-file' => 'epicute.html' );

open(FILE, '< epicute.html');
my $document = '';
while (<FILE>) {
$document .= $_;
}

foreach my $match ($document =~ m!<textarea[^>]+>&lt;a href="([^"]+)"&gt;&lt;img src='([^']+)' title=&quot;cute food photos - (.+?)&quot;.+?</textarea>!g) {
print DESC $1 . "\t" . $2 . "\t" . $3 ."\n";
}
close(FILE);
close(DESC);


Der Inhalt von "desc" war nach Laufen dieses Skriptes (kurz gefasst) die folgende Zeile

Code: (dl )
http://epicute.icanhascheezburger.com/2010/10/28/cute-food-photos-mini-candy-apple-donuts/	http://epicute.files.wordpress.com/2010/10/aa160626-34e8-4d31-b4ce-2b0d10f6c875.jpg	Mini Candy &amp;quot;Apple&amp;quot; Donuts


geschätzte 10-mal oder so.

Jetzt würde ich gerne wissen, wieso es da immer wieder nur das erste Auftreten dieser Regexp findet und nicht alle in dem Dokument vorhandenen. Falls das in dem Fall wegen HTML und so nicht so klar ist, hier vielleicht ein einfachere Frage:

Code (perl): (dl )
1
2
3
4
my $text = "Peter Pan geht sehr gerne in den Park";
foreach ($text =~ /(P\w+)/) {
print "$1\n";
}


Dieses Skript sollte entsprechend den folgenden Output geben:
Peter
Pan
Park

Wo liegt hierbei der Fehler? Hab ich irgendeine $-Sondervariable übersehen oder bin ich vollkommen auf dem Holzweg? Ich wäre sehr dankbar über eine Antwort, wobei es wahrlich nicht eilt, also nicht hetzen lassen ;-)
Last edited: 2010-11-02 11:07:30 +0100 (CET)

View full thread Array mit allen verfügbaren Regex-Treffern