Html 如何使用perl替换两行之间的文本

Html 如何使用perl替换两行之间的文本,html,regex,perl,Html,Regex,Perl,嗨,我有一个叫做1.html的html文件,像这样 <div class="t_l"></div> <some> lines of codes </some> <div class="t_r"></div> 线 属于 代码 我想将该div的内容替换为另一个div,它存储在名为“banner”的文件中。 横幅文件是 <other> lines of some cod

嗨,我有一个叫做1.html的html文件,像这样

<div class="t_l"></div>
 <some> 
   lines
     of
 codes
 </some>
<div class="t_r"></div>

线
属于
代码
我想将该div的内容替换为另一个div,它存储在名为“banner”的文件中。 横幅文件是

<other> 
   lines
     of some
 codes
</other>

线
一些
代码
所以我想得到的是:

<div class="t_l"></div>
 <other> 
   lines
     of some
 codes
 </other>
<div class="t_r"></div>

线
一些
代码
我想到的使用perl是这样的:

# Slurp file 1.html into a single string
open(FILE,"1.html") or die "Can't open file: $!";
undef $/;
my $file = <FILE>;
open(BANNER,"banner") or die "Can't open file: $!";
undef $/;
my $banner = <BANNER>;
close BANNER;

# Set strings to find and insert
my $first_line = '<div class="t_l"></div>';
my $second_line = '<div class="t_r"></div>';

$file =~ s/$first_line\n.+?\n$second_line#s/$first_line\n$banner\n$second_line/;

close FILE;

# Write output to output.txt
open(OUTPUT,">1new.html") or die "Can't open file: $!";
print OUTPUT $file;
close OUTPUT;
#将文件1.html压缩成单个字符串
打开(文件“1.html”)或死亡“无法打开文件:$!”;
未定义$/;
我的$file=;
打开(横幅,“横幅”)或死亡“无法打开文件:$!”;
未定义$/;
我的$banner=;
关闭旗帜;
#设置要查找和插入的字符串
我的$first_行=“”;
我的$second_行=“”;
$file=~s/$first_-line\n.+?\n$second_-line\s/$first_-line\n$banner\n$second_-line/;
关闭文件;
#将输出写入output.txt
打开(输出“>1new.html”)或死“无法打开文件:$!”;
打印输出$file;
闭合输出;
上述代码无法工作。有什么建议吗?

你就快到了

的正常正则表达式行为是匹配除换行符以外的任何字符<正则表达式中的code>+?不适用于您,因为
$first\u line
$second\u line
之间有更多的换行字符

使用
/s
修饰符告诉Perl也让
匹配换行符

(表达式中还有一个无关的“
#s
”)

因此,工作替代是:

$file =~ s/$first_line\n.+?\n$second_line/$first_line\n$banner\n$second_line/s;
配合

$file =~ s/($first_line\n)[^\n]+(\n$second_line)/$1$banner$2/;


$file=~s/(?您应该使用一个perl HTML解析器模块,例如
HTML::TokParser
。您真的不想用正则表达式解析HTML。这样做很疯狂:-/
$file =~ s/(?<=$first_line\n)[^\n]+(?=\n$second_line)/$banner/;