【发布时间】:2017-09-29 22:11:39
【问题描述】:
我正在尝试解析一个 html 文件,并且我有一个正则表达式,可以捕获所有 p 标签内的模式。由于某种原因,它只打印出找到的第一个实例。
my @newH2Array = ("Part I", "Part II", "Part III");
my $linenumber = 0;
while (my $line = <$parser>){
chomp $line;
$linenumber++;
if($line =~ /^<p>/){
if($line =~ /(Part [IVX]+)/gi) {
if (grep{ lc $_ eq lc $1 } @newH2Array){
print "found a hit <" . $1 . "> that matches array element on line" . $linenumber;
}
}
}
}
当我在下面的这个测试中运行它时,它只会打印出第一部分,而不是其他 3。当我将 if 语句切换到 while 循环时,它也不起作用。谁能告诉我我在这里做错了什么?
<p>Part I should be found. Part II should be found also. Part III should be found.</p>
结果应该是。
found a hit <Part I> that matches array element on line 1
found a hit <Part II> that matches array element on line 1
found a hit <Part III> that matches array element on line 1
【问题讨论】:
-
您没有使用 HTML 解析器有什么原因吗? For your own good, you shouldn't parse XML with regex.
-
因为我做了很多编辑,实际上我正在用 unicodes 替换
-
不过,一旦你完成它就不必阅读它,只有在它或多或少是有效的 HTML 时才需要阅读它。这并不意味着您必须生成有效的 HTML 作为输出。
-
您的代码丢失
$linenumber。那是怎么开始的?0还是1?@newH2Array也不见了。请edit 并提供minimal reproducible example。此外,您不需要在模式中转义尖括号<>,它们没有特殊含义。 -
@simbabque 我编辑了帖子,提供了更多信息。