我正在用perl写一个webscraper。我在尝试从get(“url”)中返回的数据中提取我想要的内容时遇到了麻烦;功能。我想找到一个带有正则表达式的特定行,然后使用另一个正则表达式匹配并将匹配存储在数组中。如果有人能给我一个非常有帮助的例子。
#!/usr/bin/perl
use LWP::Simple;
$regex = m/Prerequisite:.[A-Z]{4}[0-9]{4}/g;
$regex2 = m/[A-Z]{4}[0-9]{4}/g;
$content = $ARGV[0];
#print $content;
$urlundergrad = "http://www.handbook.unsw.edu.au/undergraduate/courses/2014/$content.html";
$urlpostgrad = "http://www.handbook.unsw.edu.au/postgraduate/courses/2014/$content.html";
if ( @ARGV = 1 ) {
$pageU = get("$urlundergrad") or die "unable to retrieve";
#$pageP = get("$urlPostgrad") or die "unable to retrieve";
foreach $line ( split( "\n", $pageU ) ) {
if ( $line =~ $regex ) {
push( @courses, $line );
}
}
print @courses;
print "\n";
} else {
print "usage: prereq.pl <UNSW course>";
}
答案 0 :(得分:0)
您没有以正确的方式使用正则表达式。要么你可以使用&#39; qr&#39;像这样的运算符:
$regex = qr/Prerequisite:.[A-Z]{4}[0-9]{4}/;
.
.
.
if ( $line =~ $regex ) {
请注意,您不能使用&#39;修饰符与qr。在你的情况下,我也没有理由这么做。了解有关qr here的更多信息。
我能想到的另一种方法是使用变量来存储你的正则表达式:
$regex = q/Prerequisite:.[A-Z]{4}[0-9]{4}/;
.
.
.
if ( $line =~ m/$regex/g ) {
另外,请注意你在第13行有一个错误。你可能意味着:
if ( @ARGV == 1 ) {