所以我有这个:
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/;
};
};
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,如果我打印其中任何一个,它将返回原始值,而不是我希望它返回的字符串替换.
谢谢你的帮助
因为匹配的第一部分不匹配,所以你得到的相同,所以没有替换.
我的猜测是(因为没有显示任何输入)你的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";
}
}
Run Code Online (Sandbox Code Playgroud)
通常,您应该避免像这样解析HTML,而是使用http://cpan.org收集的智慧多年,并使用HTML :: Parser,HTML :: Parser :: Simple或HTML :: TreeBuilder.