4

Perl 初学者有一个关于正则表达式的问题。

下面的代码成功地从我的网站获取网页内容。然后,我检查与模式“搜索类型:[Dir or Geo]”的匹配。我刚刚写的那一点不是实际的正则表达式代码,而是显示我想要匹配的文本。

这是 get 方法实际捕​​获的内容的摘录(抱歉,还没有足够的声誉点来发布图像):

        what: movers<br/>
        where: toronto<br/>

            search type:
             Dir <br/>

在“搜索类型:”和“目录”之间有制表符和空格以及您在 Word 文档中看到的那个段落字符(就在“类型:”一词之后。

下面是我的代码。

use strict;
use warnings;
use WWW::Mechanize;
my $searchtype = "nothing yet";
my $mech = WWW::Mechanize->new();
my $webpage;
$mech->credentials('user','password' );
foreach my $keyword qw(movers) {
    print "\$keyword = $keyword\n";
    my $url = "http://myurl";
    $mech->get($url);
    $webpage = $mech->content();
    if ($webpage =~ /search type.+([A-Z][a-z][a-z])/) {
        $searchtype = $1;
        print "$searchtype\n";
    }
}

那么,为什么我的正则表达式 $webpage =~ /search type.+([AZ][az][az])/ 不能捕获匹配变量 $1 中的“Dir”?

使我抓狂。

路易

4

1 回答 1

6

/./匹配除换行符以外的任何字符,除非您使用/./s. 由于要匹配换行符,因此必须添加/s.

/search type.+([A-Z][a-z][a-z])/s

但这会找到文档的最后三个字母。你其实想要

/search type:\s+([A-Z][a-z][a-z])/
于 2012-11-16T03:11:05.430 回答