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

pq
 2010-11-01 19:35
#142399 #142399
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
zum zweiten beispiel:
Code (perl): (dl )
1
2
3
4
my $text = "Peter Pan geht sehr gerne in den Park";
while ($text =~ /(P\w+)/g) {
    print "$1\n";
}


das /g für global muss da sein, und entweder nimmst du "while" und beziehst dich dann auf $1, oder du nimmst "foreach", dann musst du aber in der schleife $_ benutzen. bei foreach wird die regex gleich alle möglichkeiten matchen und über die so erhaltene liste iterieren, wobei jedes element in $_ landet.
bei while wird immer nur einmal gematcht, der match landet in $1, und in der nächsten iteration ist der nächste match dran.

da du in deinem beispiel mit dem HTML foreach verwendest, hast du in den $1, $2 variablen nicht mehr das drin, was du haben willst. nimm stattdessen einfach while, dann sollte das gehn.


edit: alternativ kann ich CPAN:HTML::Treebuilder empfehlen, dann musst du dich mit den HTML-feinheiten gar nicht mehr rumschlagen. für das modul gibts auch einen XPath-wrapper.
Last edited: 2010-11-01 19:44:03 +0100 (CET)
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

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