Ich versuche, eine HTML-Datei zu analysieren, und ich habe einen regulären Ausdruck, der Muster in allen p-Tags erfasst. Aus irgendeinem Grund wird nur die erste gefundene Instanz gedruckt.Perl: Regex druckt nur das erste gefundene Muster
my @newH2Array = ("Part I", "Part II", "Part III");
my $linenumber = 0;
while (my $line = <$parser>){
chomp $line;
$linenumber++;
if($line =~ /^<p>/){
if($line =~ /(Part [IVX]+)/gi) {
if (grep{ lc $_ eq lc $1 } @newH2Array){
print "found a hit <" . $1 . "> that matches array element on line" . $linenumber;
}
}
}
}
Wenn ich laufe es mit diesem Test unten, es würde nur Teil I ausdrucken, aber nicht die anderen 3. Wenn ich wechsle die if-Anweisungen zu einer while-Schleife nicht als entweder nicht funktionieren. Kann mir jemand sagen, was ich hier falsch mache?
<p>Part I should be found. Part II should be found also. Part III should be found.</p>
Das Ergebnis sollte sein.
found a hit <Part I> that matches array element on line 1
found a hit <Part II> that matches array element on line 1
found a hit <Part III> that matches array element on line 1
Gibt es einen Grund, warum Sie keinen HTML-Parser verwenden? [Zu Ihrem eigenen Vorteil sollten Sie XML nicht mit regulären Ausdrücken analysieren] (https://stackoverflow.com/q/1732348/1331451). – simbabque
weil ich eine Menge Bearbeitungen mache und ich eigentlich das
Eric
Es sollte es nicht lesen müssen, sobald Sie damit fertig sind, nur am Anfang, wenn es mehr oder weniger gültige HTML ist. Das bedeutet nicht, dass Sie gültiges HTML als Ausgabe produzieren müssen. – Aaron