Одним из вариантов является использование парсинга вытягивания. Здесь у вас есть пример с HTML::TokeParser
. Он использует две петли, первая используется для первого появления вашего комментария. Он печатает каждый тег, который он находит, пока не появится. Второй проходит все теги до второго появления такого же комментария и ничего не печатает.
Содержание script.pl
:
#!/usr/bin/env perl
use warnings;
use strict;
use HTML::TokeParser;
my $p = HTML::TokeParser->new (shift);
while (my $token = $p->get_token) {
printf qq|%s|, $token->[0] =~ m/S|E|PI/ ? $token->[ $#$token ] : $token->[1];
if ($token->[0] eq q|C| && $token->[1] =~ m/(?i)MyComment/) {
## Here begins the comment.
while (my $token2 = $p->get_token) {
if ($token2->[0] eq q|C| && $token2->[1] =~ m/(?i)MyComment/) {
## Here ends the comment.
printf qq|%s|, $token2->[1];
last;
}
}
}
}
Выполнить это нравится:
perl script.pl htmlfile
, что урожайность:
<html>
<head>
<title>Title</title>
</head>
<body>
<tbody>
<tr>
<td width="650">
<!--MyComment--><!--MyComment-->
</td>
</tr>
</tbody>
</body>
</html>
Существует также «HTML :: Parser», вы можете взглянуть, но я не знаю, достаточно ли это для ваших нужд. Зависит от того, чего вы хотите достичь. Оставить документ как есть, за исключением тега 'a'? Что делать, если у вас есть 3 комментария? –