匹配找到一行,然后使用perl从行w regex中提取某些元素

时间:2014-09-07 07:05:54

标签: regex perl web-scraping

我正在用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>";
}

1 个答案:

答案 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 ) {