如何从HTML文档中删除表?

时间:2009-08-11 16:26:33

标签: html regex perl

我正在将一组网页升级到一个新系统,我想剥离并更换每页顶部的样板,并用新的样板替换它。幸运的是,每个页面都有一个内容表,并且之前没有表格。我想做点什么:

$contents =~ s/^.*<table/$newHeader/

这仅适用于$ contents的第一行。有没有办法用我的新样板替换文件中第一个&lt;表之前的所有内容?

2 个答案:

答案 0 :(得分:7)

你可以使用Perl的“/s”选项告诉它“.”匹配所有字符包括换行符(处理字符串)作为单一的巨行而不是每行)。您可以使用?量词将匹配限制为第一个表,以使*非贪婪:

$contents =~ s/^.*?<table/$newHeader/s

此外,请记住,替换也会删除文本“<table”,因此您需要确保以某种方式插回,可能是:

$contents =~ s/^.*?<table/<table$newHeader/s

或者你可以使用零宽度正向前瞻断言,它表示“跟随匹配后,此表达式也必须匹配”但是前瞻断言中的文本不被视为匹配的一部分(因此不会被替换):

$contents =~ s/^.*?(?=<table)/$newHeader/s

这将使“<table”完好无损。

答案 1 :(得分:3)

“。”通常匹配除换行符之外的任何字符。将“s”附加到正则表达式以使其匹配多行:

 $contents =~ s/^.*?<table/$newHeader/s;