gpt4 book ai didi

正则表达式匹配 `rel` 元素的 `img` 属性,该元素有时仅存在

转载 作者:行者123 更新时间:2023-12-02 04:57:29 25 4
gpt4 key购买 nike

我遇到了 Perl 正则表达式的问题。在 img 元素上,我想将 src 属性与以 /file?id 开头的值以及任何 类匹配alt 属性。我想忽略有时存在有时不存在的 rel 属性,如下所示:

<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">

我的问题是如何处理可选的 rel 属性。

我正在为 rel 属性匹配尝试这样做:

(?!\s+(rel)="([^"]+)")

它在没有 rel 属性时有效,但在 img 具有 rel 属性时失败。

最佳答案

使用适当的 HTML 解析器可以轻松做到这一点。该程序演示使用 HTML::TreeBuilderlook_down 方法。

它正在搜索所有元素:

  • 'img' 标签名
  • src 属性匹配正则表达式 qr|^/file\?id=|
  • 匹配空正则表达式的 class 属性(即具有任何值的 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" />

关于正则表达式匹配 `rel` 元素的 `img` 属性,该元素有时仅存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17740729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com