1

我正在尝试使用正则表达式来捕获链接,但不能。我有所有的链接,但是有很多链接不想要。

我所做的是抓取所有链接: 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:我猜这个正则表达式会多见而不见。如果是这样,我会回来发布相同的帖子。

问题:有一堆链接,我需要与老板过期的链接: Http: // valeptr.com/scripts/runner.php?IM= 对于第 19 行中的它,我必须应用表达式调节。这个变量我的@links=$Explorador->links; 他返回所有存在的链接。但我只想要我上面放的链接。真挚地,

4

2 回答 2

6

为什么不WWW::Mechanize为您完成这项工作,尤其是当它可以通过提供的正则表达式为您过滤掉链接时?

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

没有for循环!

于 2010-07-08T06:46:18.930 回答
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;
    }
}
于 2010-07-08T08:47:58.230 回答