我有一个Perl脚本,它可以解析HTML并修改内容。我想更新下面的脚本,在页面上的特定ID周围包装一个noindex标签。
相关Perl信息
undef $/;
my $doc = <>;
if ($main::atomz_search_url=~ m{mydomain.com/(.+?)/support}si)
{
$doc =~ s{<div id="header">}{<div id="header" class="noindex">}sig;
}
当前HTML
<form id="search" action="../results.html" method="post">
<fieldset>
...
</fieldset>
</form>
我只想找到ID为"search"的FORM,并用noindex标签包装整个FORM块(包括原始内容)。
<noindex>
<form id="search" action="../results.html" method="post">
<fieldset>
...
</fieldset>
</form>
</noindex>
注意:我只能使用核心模块,所以Mojo
不是一个选项。
放下正则表达式,获得专为该目的设计的东西。例如Mojo::DOM。
use Mojo::DOM;
my $dom = Mojo::DOM->new($doc);
$dom->at("#search")->wrap("<noindex></noindex>");
say $dom;
假设这是一个简单的文本处理可以完成的特定任务。如果你还有更多的事情要做,我建议你使用合适的包装。
至关重要的是,html form
s不能嵌套,因此您可以搜索您的一对表单标记。
如果你能把整个页面读入字符串
my $file = 'page_with_form.html';
my $page = do {
local $/ = undef;
open my $fh, '<', $file or die $!;
<$fh>;
};
$page =~ s{(<forms+id="search".+?</form>)}{<noindex>n$1</noindex>}s;
如果页面太大,无法读入变量,请逐行阅读,并使用标记(带有)表单的开始和结束标记。如果需要添加,请告诉我。