2012-05-18 5 views
1

Я новичок во всем. Пожалуйста помоги. Я пытаюсь проползать каждые, пожалуйста, помогите мне определить регулярное выражение perl

<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div> 

на домашней странице. Я хочу поймать часть/v/name/idlike123123ksajdfk. (Зная, что

<div class="name"><a href="/v/ 

часть фиксирована) Так что я написал регулярное выражение (может заставить вас смеяться):

~m#<div class="name"><a href="(/v/.*?)"># 

Это будет очень полезно, если вы исправить мой глупый код.

+2

Regexing HTML покрыта здесь http://stackoverflow.com/questions/1732348/regex-match-open-tags -except-xhtml-self-contains-tags/1732454 # 1732454 – beresfordt

ответ

6

Использование robust HTML parser (см http://htmlparsing.com/, почему):

use strictures; 
use Web::Query qw(); 
my $w = Web::Query->new_from_html(<<'HTML'); 
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div> 
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div> 
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div> 
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div> 
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div> 
HTML 

my @v_links = $w->find('div.name > a[href^="/v/"]')->attr('href'); 
+0

Вы должны немного улучшить свой ответ, чтобы убедиться, что '@ links' содержит только ссылки, содержащие звездочки с'/v/', как остатки в сообщении OP. –

+0

↑ Звучит разумно, сделано ↑ – daxim

0

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

Ответ Даксима - хороший пример.


Однако, если вы хотите использовать регулярные выражения в любом случае, и у вас есть текст, назначенный для $_, затем

my @list = m{<div class="name"><a href="(/v/.*?)">}g; 

поможет вам список всех результатов.

+0

http://enwp.org/Leaning_toothpick_syndrome – daxim

1

Веб соскоб с Mojolicious, вероятно, самый простой способ сделать это в Perl в настоящее время

http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Web_scraping

+0

Извините, что разместили это как «ответ», но я не могу комментировать других, чтобы поместить эту ссылку в сообщение Брайана. – alexsergeyev

+0

спасибо за ваше предложение. Это выглядит аккуратно. Жаль, что у меня пока нет возможности попробовать. –

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