4

Perl初心者で正規表現について質問です。

以下のコードは、私の Web サイトから Web ページのコンテンツを正常に取得します。次に、「検索タイプ: [Dir or Geo]」というパターンに一致するかどうかを確認します。私が書いたそのビットは、実際の正規表現コードではなく、一致させたいものを示すテキストです。

get メソッドが実際にキャプチャするものの抜粋を次に示します (申し訳ありませんが、画像を投稿するのにまだ十分な評価ポイントがありません)。

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

            search type:
             Dir <br/>

"search type:" と "Dir" の間には、タブとスペース、および Word ドキュメントで見られる段落文字 ("type:" という単語の直後) があります。

以下は私のコードです。

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

しかし、それは文書の最後の 3 文字を見つけることになります。あなたは実際に欲しい

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