Возвращает строку на веб-странице между двумя разными словами / строками в perl - PullRequest
0 голосов
/ 24 ноября 2011

Все, я понимаю против gooogle ToC, но я пытался написать Perl-скрипт, который выполняет поиск в Google и возвращает количество совпадений (например, 1 из примерно XXXX для поискового запроса).Я должен заявить, что я новичок в Perl.

После прочтения и т. Д. Это то, что у меня есть, но оно ничего не возвращает, и я не уверен, почему ... кто-нибудь может дать мне несколько советов.

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 <b>([1234567890,]<\/b> +)/) {
  print $res;
}

1 Ответ

3 голосов
/ 24 ноября 2011

Линия:

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

Имеет следующие ошибки:

  • В то время как инструкция будет вызывать бесконечный цикл, если строка совпадает, потому что ...
  • ... регулярному выражению не хватает глобальной опции /g, которая была бы бесполезна потому что ...
  • ... Полагаю, этот матч произойдет только один раз.
  • [1234567890,] будет соответствовать только одному символу, и лучше написано [0-9,]+. Обратите внимание на знак плюс в конце, чтобы разрешить несколько совпадений.
  • ==~ должно быть =~
  • $res должно быть, вероятно, $res->content, как указано в комментарий.
  • Ваша группа захвата выходит за пределы тега </b>, который, я полагаю, опечатка?

Кроме того, вы распечатываете весь объект $res, когда вы, вероятно, хотите напечатать только число. Более правильная версия:

if ($res->content =~ /of about <b>([0-9,]+)/) { print $1 }
...