這是使用正確的HTML解析器做的微不足道。該程序演示使用HTML::TreeBuilder
和look_down
方法。
它搜索與所有元素:
- 'IMG' 的標籤名
- 的正則表達式匹配QR一個
src
屬性|^/文件\ ID = |
- 一個
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" />
[不要這樣做](http://stackoverflow.com/a/1732454/19068),使用一個真正的[HTML解析器](https://metacpan.org/module/HTML::TreeBuilder :: XPath)。 – Quentin
一月:你的意思是(二)學習如何*不*正則表達式。 – innaM
@Quentin使用正則表達式來匹配一個已知的,有限的HTML/XML子集可以很好,這取決於所需的穩健性水平與複雜性和性能水平。當你知道爲什麼和後果是什麼時,也可以打破規則。 –