2015-03-12 6 views
0

Исходя из этого, пытаясь извлечь html-ссылки из исходного файла html. Что мне не хватает? Я проверил регулярное выражение, он прекрасно работает, но здесь она ничего не возвращает на всех (пробовал различные веб-сайты, а)Регулярное выражение в HTML

#!/usr/bin/perl 

use LWP::Simple; 
my $url = "http://www.svenskaspel.se"; 
my $content = get($url); 
my @links =(); 

$content =~ /<a[^>]* href=([^"]*)/; 
push (@links, $_); 

foreach $_ (@links){ 
    print "$_\n"; 

    } 
+0

удалить одиночные кавычки, которые были вокруг '

+0

Пробовал, такая же проблема, ничего .. –

+0

print' $ 1' .... –

ответ

0

Линии:

$content =~ /<a[^>]* href=([^"]*)/; 
push (@links, $_); 

должны быть:

$content =~ /<a[^>]* href="([^"]*)/; 
push (@links, $1); 
+0

Все еще не работает, извините. –

+0

@ kaktusräv: см. Мое редактирование. – Toto

0

Ваше регулярное выражение кажется неправильным.

проверить эту ссылку - http://regexr.com/3ajeh, чтобы увидеть рабочее регулярное выражение. вставить источник любой HTML-страницы в текстовой области для тестирования.

Обратите внимание: регулярное выражение не является рекомендуемым способом анализа HTML, поскольку HTML не является регулярным языком.

См. this famous answer.

2

Серьезно - не надо. Разбор HTML через регулярное выражение является грязным взломом и создает хрупкий код. RegEx match open tags except XHTML self-contained tags

Вот пример некоторых альтернативных подходов: How do I extract links from HTML with a Perl regex?

+0

Что случилось с закрытием дубликатов? –

0

Если файл HTML не является чрезвычайно простой (список ссылок), вы, вероятно, следует избегать разбора его самостоятельно, как уже было сказано. В этом ответе я предлагаю вам «обмануть» и установить что-нибудь из CPAN, чтобы помочь :-)

например. вы могли use Mojolicious - конкретно mojo инструмент, который входит в состав этого модуля:

mojo get https://www.svenskaspel.se a attr href 

, который в «длинной форме» это что-то вроде:

perl -Mojo -E ' my $ua = Mojo::UserAgent->new; 
     say $ua->get("https://www.svenskaspel.se") 
    ->res->dom->find("a[href]")->map(attr => 'href')->join("\n");' 

Чем дольше Однострочник выходы:

/ 
/
/spela 
/mina-spel 


/bomben 
# 
/stryktipset/tipssm 
/triss 
/grasroten 
/spelkoll 
/kundservice 
/om-cookies 

, который включает в себя пустые строки, потому что некоторые из атрибутов href не имеют содержания (href="").

Вы можете управлять селектором, используя синтаксис соответствия от Mojo::DOM SELECTORS. Таким образом, аналогично DOM CSS-селекторам, что-то вроде: ...->dom->find("a[href^=/]") будет искать значения атрибутов href, которые начинаются с "/".

Смежные вопросы