我正在将一组网页升级到一个新系统,我想剥离并更换每页顶部的样板,并用新的样板替换它。幸运的是,每个页面都有一个内容表,并且之前没有表格。我想做点什么:
$contents =~ s/^.*<table/$newHeader/
这仅适用于$ contents的第一行。有没有办法用我的新样板替换文件中第一个&lt;表之前的所有内容?
答案 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;