2011-03-31 21 views
-1

你經常幫助我,夥計們,所以我希望你可以再次做到這一點:]我需要替換文本剛剛關閉後</table>標籤在Perl

我有一個字符串,其中包含HTML數據(犯規一定

<table> 

標籤,但它可以有那麼有時會),我想替換字符串。事實上,Im做它喜歡,但是,這並不工作表時會做「與

<br><div>newdiv</div> 

取代

<br> 

第一個發現」,因爲「newdiv」必須在表格外。

有沒有告訴Perl中只有一定的標籤後,以取代任何方式(對我來說這將是

</table> 

)搜索前已經發現?

謝謝!

+1

提供示例數據,您的描述不夠清晰。 – daxim 2011-03-31 13:43:59

回答

0

爲什麼不通過文件逐行掃描,計算表的所有開始/結束標記。如果總和爲零(所有起始表標籤都用結束標籤關閉),則執行匹配/替換。

3

用正則表達式解析HTML通常是一個糟糕的主意。這在處理任意HTML的一般情況下尤其糟糕。但是,越是限制您正在處理的輸入,通常情況越糟糕。

您是否嘗試過使用HTML::TreeBuilderHTML::Parser解析您的HTML?這個未經測試的代碼應該做你想做的事 - 根據你的描述,我可以告訴你,如果可能的話,請發佈樣本數據和期望的結果。

# Parse your html 
my $t = HTML::TreeBuilder->new_from_content($html); 
$t->eof; 
$t->elementify; 

my @tables = $t->lookdown(_tag => 'table'); 
for my $table (@tables) { 

    # Skip this table unless it is immediately followed by a br 
    my $br = $table->right; 
    next unless $br->tag eq 'br'; 

    # Insert the new div 
    $br->postinsert('<div>newdiv</div>'); 
}