您好我有一个名为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;
以上代码无法正常工作。有什么建议吗?
答案 0 :(得分:2)
你快到了。
.
的正常正则表达式行为是匹配除换行符之外的任何字符。正则表达式中的.+?
不适合您,因为$first_line
和$second_line
之间有更多换行符。
使用/s
修饰符告诉Perl让.
也匹配换行符。
(表达式中还有一个无关的“#s
”)
所以工作替代是:
$file =~ s/$first_line\n.+?\n$second_line/$first_line\n$banner\n$second_line/s;
答案 1 :(得分:1)
使用
$file =~ s/($first_line\n)[^\n]+(\n$second_line)/$1$banner$2/;
或
$file =~ s/(?<=$first_line\n)[^\n]+(?=\n$second_line)/$banner/;