所以我有这个:

for $i (0..@parsedText) {
if ($parsedText[$i] =~ /\s{20}<a href/) {

    my $eventID = $parsedText[$i];
    my $eventLink = $parsedText[$i];
    my $event_id_title = $parsedText[$i];

    $eventID =~ s/[\s\S]*?id=(\d+).*\n/$1/;
    $eventLink =~ s/[\s\S]*?'(.*?)'.*/$1/;
    $event_id_title =~ s/\s+<a[\s\S]*?>([^<]*).*\n/$1/;
    };
};

但是由于某种原因,如果我打印其中任何一个,它将返回原始值,而不是我希望返回的字符串替换。

谢谢你的帮助

最佳答案

您得到的结果与出局的结果相同,因为匹配的第一部分不匹配,因此没有替换。

我的猜测是(由于未显示任何输入)您的parsedText数组中没有换行符。这是写上面所做的工作的一种更简洁的方法:

foreach ( @parsedText ) {
  if (/\s{20}<a href/) {

    ( my $eventID = $_ )        =~ s/.*?id=(\d+).*/$1/;
    ( my $eventLink = $_ )      =~ s/.*?'(.*?)'.*/$1/;
    ( my $event_id_title = $_ ) =~ s/\s+<a.*?>(.*?)<.*/$1/;

    print "$eventID, $eventLink, $event_id_title\n";
  }
}

通常,您应避免像这样解析HTML,而应使用http://cpan.org收集的多年知识,并使用HTML::Parser,HTML::Parser::Simple或HTML::TreeBuilder。

关于regex - 初学者perl问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6460633/

10-10 00:25