Perl初学者,关于正则表达式的问题。
以下代码成功从我的网站获取网页内容。 然后,我检查匹配模式“搜索类型:[Dir或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。+([A-Z] [a-z] [a-z])/捕获匹配变量$ 1中的“Dir”?
让我疯了。
路易
答案 0 :(得分:6)
/./
,否则 /./s
会匹配除换行符之外的任何字符。由于您要匹配换行符,因此您必须添加/s
。
/search type.+([A-Z][a-z][a-z])/s
但那会找到文件的最后三个字母。你真的想要
/search type:\s+([A-Z][a-z][a-z])/