使用适当的 HTML 解析器很容易做到这一点。本程序演示使用HTML::TreeBuilder
和look_down
方法。
它正在搜索所有元素:
- 'img' 的标签名称
- 匹配正则表达式 qr|^/file\?id=|的
src
属性
- 匹配空正则表达式的
class
属性(即具有任何值的类属性)
- 与空正则表达式匹配的
alt
属性
找到元素后,您不会说要对它们做什么。此代码仅用于as_HTML
显示它们。
use strict;
use warnings;
use HTML::TreeBuilder;
my $html = HTML::TreeBuilder::XPath->new_from_file(\*DATA);
my @images = $html->look_down(
_tag => 'img',
src => qr|^/file\?id=|,
class => qr//,
alt => qr//
);
print $_->as_HTML, "\n" for @images;
__DATA__
<html>
<head>
<title>Page title</title>
</head.
<body>
<img rel="lightbox[45451]" src="/file?id=13166" class="bbc_img" alt="myimagess.jpg">
<img src="/file?id=13166" class="bbc_img" alt="myimagess.jpg">
<img src="/file" class="bbc_img" alt="myimagess.jpg"> /* mismatch id="" */
<img src="/file?id=13166" alt="myimagess.jpg"> /* no class="" */
<img src="/file?id=13166" class="bbc_img"> /* no alt="" */
</body>
</html>
输出
<img alt="myimagess.jpg" class="bbc_img" rel="lightbox[45451]" src="/file?id=13166" />
<img alt="myimagess.jpg" class="bbc_img" src="/file?id=13166" />