Удаление любых видео из фрагмента HTML - PullRequest
0 голосов
/ 02 января 2019

У меня есть (возможно, не соответствующий каким-либо стандартам) фрагмент 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 Ответ

0 голосов
/ 03 января 2019
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);
...