我有一个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。
答案 0 :(得分:2)
放下正则表达式并获得为此目的而设计的东西。例如Mojo :: DOM。
use Mojo::DOM;
my $dom = Mojo::DOM->new($doc);
$dom->at("#search")->wrap("<noindex></noindex>");
say $dom;
答案 1 :(得分:0)
鉴于这是一项特定的任务,一个简单的文本处理可能会这样做。 如果您还有更多工作要做,我建议您使用合适的包装。
html form
无法嵌套至关重要,因此您可以搜索一对表单标记。
如果您可以将整个页面读成字符串
my $file = 'page_with_form.html';
my $page = do {
local $/ = undef;
open my $fh, '<', $file or die $!;
<$fh>;
};
$page =~ s{(<form\s+id="search".+?</form>)}{<noindex>\n$1</noindex>}s;
如果页面太大而无法读入变量,请逐行阅读并使用标记(表示行)的开始和结束标记。如果我需要添加此内容,请与我们联系。