Perlの2つの異なる単語/文字列の間のWebページの文字列を返す

すべて、   私はgooogle ToCに気づいていますが、私はGoogle検索を実行し、ヒット数を返します(検索用語の約XXXXの1など)を返すperlスクリプトを作成しようとしていました。私はperl newbieだと言わなければならない。

読んだ後これは私が持っているものですが、それは何も戻っていないと私はなぜ...誰かが私にいくつかのポインタを与えることができますか分からない。

use LWP::Simple;

my $ua = new LWP::UserAgent;
$ua->agent('Mozilla/5.0');

my $url=$ARGV[0];
my $req = HTTP::Request->new(GET => $url);
my $res = $ua->request($req);

$res->content;  

print "all done \n";    

while ($res ==~ /of about ([1234567890,]<\/b> +)/) {
  print $res;
}
0
あなたは厳格と警告を使用していないのですか?
追加された 著者 TLP,
レスポンスオブジェクトではなく、 $ res-> content に対して正規表現を実行する必要があります。
追加された 著者 a'r,

1 答え

この線:

while ($res ==~ /of about ([1234567890,]<\/b> +)/) {

次のエラーがあります。

  • While statement will cause an endless loop if the string matches, because...
  • ...the regex lacks the /g global option, which would be useless because...
  • ...I assume this match will happen only once.
  • [1234567890,] will only match one character, and is better written [0-9,]+. Note the plus sign at the end to allow multiple matches.
  • ==~ should be =~
  • $res should probably be $res->content, like a'r stated in the comment.
  • Your capture group extends beyond the tag, which I suppose is a typo?

また、おそらく数字だけを印刷したいときは、 $ res オブジェクト全体を印刷します。 もっと正しいバージョン:

if ($res->content =~ /of about ([0-9,]+)/) { print $1 }
3
追加された
+1:優れた分析。
追加された 著者 Zaid,