当前位置:  开发笔记 > 编程语言 > 正文

如何使用正则表达式删除其类的整个HTML标记(及其内容)?

如何解决《如何使用正则表达式删除其类的整个HTML标记(及其内容)?》经验,为你挑选了2个好方法。

我对Regex不是很好,但我正在学习.

我想通过类名删除一些html标记.这是我到目前为止:


首先 .*?是因为它可能包含其他属性,第二个可能包含其他html内容.

我究竟做错了什么?我试了很多但没有成功.

更新

在DIV内部,它可以包含多行,我正在玩Perl正则表达式.



1> 小智..:

正如其他人所说,HTML处理使用正则表达式是非常棘手的,而DOM方法可能会更好.例如:

use HTML::TreeBuilder::XPath;

my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse_file( 'yourdocument.html' );

for my $node ( $tree->findnodes( '//*[@class="footer"]' ) ) {
    $node->replace_with_content;   # delete element, but not the children
}

print $tree->as_HTML;



2> Chris Marast..:

您还希望在div标记之前允许其他内容

]*class="footer"[^>]*>(.*?)

另外,不区分大小写.您可能需要转义引号之类的内容或结束标记中的斜杠.你在做什么背景?

另请注意,使用正则表达式进行HTML解析可能非常讨厌,具体取决于输入.在下面的答案中提出了一个很好的观点 - 假设你有一个类似的结构:

试图为此构建一个正则表达式是灾难的一个方法.最好的办法是将文档加载到DOM中,然后对其进行操作.

应该紧密映射到XML :: DOM的伪代码:

document = //load document
divs = document.getElementsByTagName("div");
for(div in divs) {
    if(div.getAttributes["class"] == "footer") {
        parent = div.getParent();
        for(child in div.getChildren()) {
            // filter attribute types?
            parent.insertBefore(div, child);
        }
        parent.removeChild(div);
    }
}


这是一个perl库,HTML :: DOM,另一个,XML :: DOM
.NET有内置的库来处理dom解析.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有