Junk id="i_0100_1" alt="text1, text2 | text3"
Junk Junk id="i_0100_2" alt="text1, text2 | text3"
我用这个来做。
my $file = "page.html";
open (LOGFILE, $file);
my %hash;
while (my $line = <LOGFILE>)
{
%hash = $line =~ /^\s*id="([^"]*)"\s*alt="([^"]*)"/mg;
print $hash{'id'};
}
close LOGFILE;
我错过了什么?
答案 0 :(得分:4)
autodie
。i
正则表达式标志。'='
不必在属性名称之后或在值之前。#6是对3-5的问题的总结。我建议的解决方案是使用HTML::Parser
或HTML::TreeBuilder
答案 1 :(得分:2)
您应该始终检查打开文件的返回值:
open LOGFILE, $file or die $!;
此外,正则表达式中可能不需要^
锚点。
答案 2 :(得分:2)
除了Axeman's suggestions(其中最重要的是不自己解析HTML):
^
锚点会阻止您的正则表达式匹配,因为“id”不在
行的开头。%hash
中的每个作业的数据
不是你想要的。id
属性。答案 3 :(得分:1)
答案 4 :(得分:0)
这就是诀窍:
my $file = "page.htm";
open (LOGFILE, $file);
my %hash;
while (my $line = <LOGFILE>)
{
%hash = $line =~ /\s*id="([^"]*)"\s*alt="([^"]*)"/;
for my $key ( keys %hash ) {
my $value = $hash{$key};
print "$key\n$value\n";
}
}
close LOGFILE;
问题在于哈希输出和正则表达式定义。感谢eugene,michael和ish。 :)