如何从HTML文档中删除表?

ico*_*uff 1 html regex perl

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

$contents =~ s/^.*<table/$newHeader/
Run Code Online (Sandbox Code Playgroud)

这仅适用于第一行$ contents.有没有办法用我的新样板替换文件中第一个<table之前的所有内容?

Ada*_*kin 7

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

$contents =~ s/^.*?<table/$newHeader/s
Run Code Online (Sandbox Code Playgroud)

另外,请记住替换也将删除文本" <table",因此您需要确保以某种方式插回,可能使用:

$contents =~ s/^.*?<table/<table$newHeader/s
Run Code Online (Sandbox Code Playgroud)

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

$contents =~ s/^.*?(?=<table)/$newHeader/s
Run Code Online (Sandbox Code Playgroud)

这将使<table"完好无损".