Frage

  

Mögliche Duplizieren:
   Wie kann ich externe Links aus HTML mit Perl entfernen?

In Ordnung, ich arbeite auf einem Job für einen Kunden gerade jetzt, der gerade seine Sprache Wahl in Perl geschaltet werden. Ich bin nicht die beste in Perl, aber ich habe allerdings eine Weile her, damit Sachen wie diese vorher getan.

Es gibt viele Links wie folgt:

<a href="/en/subtitles/3586224/death-becomes-her-en" title="subtitlesDeath Becomes Her" onclick="reLink('/en/subtitles/3586224/death-becomes-her-en');" class="bnone">Death Becomes Her
        (1992)</a>

Ich möchte den Weg entsprechen „/ de / Untertitel / 3586224 / Tod wird-her-en“ und setzen diese in einem Array oder eine Liste (nicht sicher, welche diejenigen besser in Perl). Ich habe die Perl-Dokumentation gesucht, sowie bei regex Tutorials suchen, und die meisten, wenn nicht schien alles darauf ausgerichtet, mit ~ = Sachen passen, anstatt Capture-Spielen.

Danke,

Cody

War es hilfreich?

Lösung

Verwenden Sie einen richtigen HTML-Parser HTML zu analysieren. Siehe dieses Beispiel mit HTML :: Parser

Oder betrachten Sie das folgende einfache Beispiel:

#!/usr/bin/perl

use strict; use warnings;

use HTML::TokeParser::Simple;

my $parser = HTML::TokeParser::Simple->new(\*DATA);

my @hrefs;

while ( my $anchor = $parser->get_tag('a') ) {
    if ( my $href = $anchor->get_attr('href') ) {
        push @hrefs, $href if $href =~ m!/en/subtitles/!;
    }
}

print "$_\n" for @hrefs;

__DATA__
<a href="/en/subtitles/3586224/death-becomes-her-en" title="subtitlesDeath 
Becomes Her" onclick="reLink('/en/subtitles/3586224/death-becomes-her-en');" 
class="bnone">Death Becomes Her
                (1992)</a>

Ausgabe:

/en/subtitles/3586224/death-becomes-her-en

Andere Tipps

Sie nicht reguläre Ausdrücke verwenden. Verwenden Sie einen HTML-Parser wie HTML :: TreeBuilder .

my @links;
my $tree = HTML::TreeBuilder->new; # empty tree
$tree->parse_file($file_name);
$tree->elementify;

my @links = map { $_->attr('href') } $tree->look_down( _tag => 'a');

$tree = $tree->delete;

# Do stuff with links array

URLs wie die in Ihrem Beispiel kann wie

mit einem regulären Ausdruck angepasst werden
($url) = /href=\"([^\"]+)\"/i

Wenn das HTML je einfache Anführungszeichen (oder ohne Anführungszeichen) um eine URL verwendet, oder wenn es jemals zitieren Zeichen in der URL ist, dann wird dies nicht ganz richtig funktionieren. Aus diesem Grund erhalten Sie einige Antworten zu sagen Sie nicht reguläre Ausdrücke zu verwenden, um HTML zu analysieren. Beachten sie aber weitermachen, wenn Sie sicher sind, dass der Eingang gut erzogen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top