2016-04-15 12 views
0

私はHTMLを解析して内容を変更するPerlスクリプトを持っています。私はページの特定のIDの周りにnoindexタグをラップするために私のスクリプトを更新したいと思います。ラップフォームwth新しいタグ

関連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とFORMを見つけて、(元を含む全体FORMブロックをラップしたいですコンテンツ)をnoindexタグで置き換えます。

<noindex> 
<form id="search" action="../results.html" method="post"> 
    <fieldset> 
     ... 
    </fieldset> 
</form> 
</noindex> 

注:MOJOはオプションではないので、コアモジュールのみを使用できます。

+2

http://shadow.cat/blog/matt-s-trout/mstpan-4/ – Quentin

答えて

0

これは、単純なテキスト処理が行う可能性がある特定のタスクであるとします。 もっとやりたいことがあれば、適切なパッケージを使用することをお勧めします。

html formをネストすることは不可能であるため、フォームタグのペアを検索することができます。ページがvarialbeに読み込むには大きすぎる場合は、文字列

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; 

にページ全体を読むことができる場合

、行ずつ、それを読んでために(とライン)の開口部を、マーカーを使用し、フォームの終了タグ。これを追加する必要があるかどうかを教えてください。

2

正規表現を入れて、目的のために設計されたものを入手してください。たとえばMojo :: DOM。

use Mojo::DOM; 
my $dom = Mojo::DOM->new($doc); 
$dom->at("#search")->wrap("<noindex></noindex>"); 
say $dom; 
+0

私はできると思います。残念ながら、これはAdobeのSaaSツールであるSearch&Promoteと呼ばれ、他のツールを使用する環境を追加/変更することはできません。私は純粋なPerlで解決策が必要になります – user1754738

+1

@ user1754738 Mojo :: DOM *は純粋なPerlですが、私はあなたがコアモジュールしか使えないと思っています。あなたはあなたの質問にその情報を編集する必要があります。 – ThisSuitIsBlackNot

関連する問題