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 行目で、式を適用する必要があります。この変数 my @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 に答える