2

こんにちは私はこのような1.htmlファイルと呼ばれるhtmlを持っています

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

そのdivのコンテンツを、「banner」というファイルに保存されている別のdivのコンテンツに置き換えたいと思います。バナーファイルは

<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;

上記のコードは機能しません。助言がありますか?

4

2 に答える 2

2

もうすぐです。

の通常の正規表現の動作は.、改行を除くすべての文字に一致することです。との間に.+?改行文字が多いため、正規表現では機能しません。$first_line$second_line

/s修飾子を使用すると、Perlに.改行文字も一致させるように指示されます。

#s(あなたの表現には無関係な「」もあります)

したがって、有効な代替は次のとおりです。

$file =~ s/$first_line\n.+?\n$second_line/$first_line\n$banner\n$second_line/s;
于 2012-09-06T21:51:01.890 に答える
1

一緒に行く

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

また

$file =~ s/(?<=$first_line\n)[^\n]+(?=\n$second_line)/$banner/;
于 2012-09-06T22:45:31.263 に答える