2010-07-07 38 views
1

我想用正则表达式来捕捉链接,但不能。 我有所有的链接,但有很多不想要的链接。如何使用WWW :: Mechanize获得与正则表达式匹配的链接?

我要做的就是抓住所有链接: http://valeptr.com/scripts/runner.php?IM= 遵守这种模式。

我把剧本我做:

use warnings; 
use strict; 
use WWW::Mechanize; 
use WWW::Mechanize::Sleepy; 

my $Explorador = 

    WWW::Mechanize->new(

     agent => 
      'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624', 

     sleep => '5..20' 
    ); 

#Proceed to access the URL to find all the links in emails 
$Explorador->get("file:/home/alejandro/Escritorio/hehe.php.html"); 

#If you want debug DOM Document. 
#print $Explorador->content(); 

my @links = $Explorador->links; 

foreach my $link (@links) { 

    # Retrieve the link URL like: 
    # http://valeptr.com/scripts/runner.php?IM=0cdb7d48110375. 
    my $href = $link->url; 

    foreach my $s ($href) { #Aqui la expresión regular 

     my @links = $s =~ qr{ 
           (
           [^B]* 
           ) 
           $ 
          }x; 
     foreach (@links) { 
      print "\n",$_; 
     } 
    } 
} 

PS:我想这正则表达式将超过见过但没见过。如果是的话,我想回来把一个帖子用相同的。

问题: 有一个链接一堆,我需要cojer与老板过期链接: Http: // valeptr.com/scripts/runner.php?IM= 对于它在该行19我要申请的表达调控。 这个变量my @ links = $ Explorador-> links;他返回所有存在的链接。 但我只想要cojer我上面提到的链接。 此致

+0

你需要上正是你需要一点更清晰。 – 2010-07-07 21:38:04

+0

好的我编辑帖子 – Backglass 2010-07-07 21:39:28

+1

在这里发布你的代码。花点功夫将它正确地格式化。 – 2010-07-07 21:40:33

回答

6

为什么不让WWW::Mechanize为您做好工作,特别是当它可以通过提供的正则表达式为您过滤掉链接?

my @wanted_links = $Explorador->find_all_links ( 
            url_regex => qr{scripts/runner\.php\?IM=} 
           ); 

for loop!

+0

+1 for for for循环 – 2012-05-28 07:03:03

0

作为您的参考链接似乎是修复,你可以考虑使用SUBSTR代替正则表达式

$ref_link = q!http://valeptr.com/scripts/runner.php?IM=!; 
foreach my $link ($Explorador->links) { 
    my $href = $link->url; 
    if (substr($href, 0, length($ref_link)) eq $ref_link) { 
     push @save, $href; 
    } 
}