我尝试在Perl中使用正则表达式来解析一个具有以下结构的表。第一行如下:
<tr class="Highlight"><td>Time Played</a></td><td></td><td>Artist</td><td width="1%"></td><td>Title</td><td>Label</td></tr>
这里我希望取出“播放时间”、“艺术家”、“标题”和“标签”,并将它们打印到输出文件。
我尝试过许多正则表达式,例如:
$lines =~ / (<td>) /
OR
$lines =~ / <td>(.*)< /
OR
$lines =~ / >(.*)< /
我目前的程序看起来是这样的:
#!perl -w
open INPUT_FILE, "<", "FIRST_LINE_OF_OUTPUT.txt" or die $!;
open OUTPUT_FILE, ">>", "PLAYLIST_TABLE.txt" or die $!;
my $lines = join '', <INPUT_FILE>;
print "Hello 2\n";
if ($lines =~ / (\S.*\S) /) {
print "this is 1: \n";
print $1;
if ($lines =~ / <td>(.*)< / ) {
print "this is the 2nd 1: \n";
print $1;
print "the word was: $1.\n";
$Time = $1;
print $Time;
print OUTPUT_FILE $Time;
} else {
print "2ND IF FAILED\n";
}
} else {
print "THIS FAILED\n";
}
close(INPUT_FILE);
close(OUTPUT_FILE);
3条答案
按热度按时间bihw5rsg1#
不要使用正则表达式来解析HTML。有大量的CPAN模块可以更有效地为你做这件事。
xtfmy6hx2#
用HTML::TableExtract。真的。
这就是我在另一篇文章中所说的“特定于任务的”HTML解析器。
您可以将精力集中在阅读一些文档上,而不是将正则表达式扔到墙上,看看是否有任何正则表达式卡住,这样可以节省很多时间。
zy1mlcev3#
这很简单:
如果要尝试运行它,请参阅http://codepad.org/qz9d5Bro。