代码之家  ›  专栏  ›  技术社区  ›  porton

从HTML片段中删除任何视频

  •  1
  • porton  · 技术社区  · 5 年前

    我有一个(可能不符合任何标准)嵌入视频的HTML片段。问题是用视频移除子碎片。

    预计视频将采用以下格式:

    <div data-oembed-url="https://www.youtube.com/watch?v=XXX&amp;feature=youtu.be"><iframe allowfullscreen="allowfullscreen" frameborder="0" height="270" src="https://www.youtube.com/embed/XXX?feature=oembed" tabindex="-1" width=" 480"></iframe></div>

    我完全不确定所有的数据是否都遵循这个方案。

    我认为任何 div p 只包含视频的内容也应该删除。

    请帮助编写Perl代码以删除视频。您建议使用哪个Perl模块进行解析?

    1 回复  |  直到 5 年前
        1
  •  1
  •   porton    5 年前
    sub RemoveVideo {
      my ($str) = @_;
    
      my $attrRe = qr/\s*(?<name>\b\S+\b)\s*=\s*(?<value>"[^"]*"|'[^']*'|[^"'<>\s]+)\s*/;
      my $iframeRe = qr{<iframe\b($attrRe)*>\s*</iframe\s*>|<iframe\b($attrRe)*\s*/>}i;
      my $divRe = qr{<div\b($attrRe)*>\s*$iframeRe\s*</div\s*>\s*}i;
      my $pRe = qr{<p\b($attrRe)*>\s*$iframeRe\s*</p\s*>\s*}i;
      $str =~ s/$divRe//gms;
      $str =~ s/$pRe//gms;
      $str =~ s/$iframeRe//gms; # "голый" iframe (не внутри дива)
    
      return $str;
    }
    my $Test = <<EOF;
    XXX
    <IFRAME allowfullscreen="allowfullscreen" frameborder="0" height="270" src="https://www.youtube.com/embed/XXX?feature=oembed" tabindex="-1" width=" 480"></iframe>
    <div data-oembed-url="https://www.youtube.com/watch?v=XXX&amp;feature=youtu.be"><iframe allowfullscreen="allowfullscreen" frameborder="0" height="270" src="https://www.youtube.com/embed/XXX?feature=oembed" tabindex="-1" width=" 480"></iframe></div>
    <p data-oembed-url="https://www.youtube.com/watch?v=XXX&amp;feature=youtu.be"><iframe allowfullscreen="allowfullscreen" frameborder="0" height="270" src="https://www.youtube.com/embed/XXX?feature=oembed" tabindex="-1" width=" 480"></iframe></p>
    YYY
    EOF
    
    print RemoveVideo($Test);