我正在尝试在两个标签之间提取文本文件的内容,并将其存储到另一个文件中。
我设法将输入文件转换为多行字符串变量,然后成功使用regexp来获取我想要的变量。
但我无法将我的变量写入文件,我认为这是因为内部有多个\ n的字符串类型。
我将不胜感激任何帮助。 (这是我的第一个Perl脚本......)
对于测试,我使用index.html文件,但可以是任何文本文件。
编辑:已解决,请参阅评论中的更正
下面是我记录的代码:
# Extract string between two tags
use strict;
use warnings;
my $inputfile = "";
my $outputfile = "";
# Parse Macro Arguments arguments
if(@ARGV < 2)
{
print "Usage: perl Macro_name.pl <inputfile.HTML> <outfile.HTML>\n";
exit(1);
}
$inputfile = $ARGV[0];
$outputfile = $ARGV[1];
my $body="";
# Convert input file to multiple line string #
$body = File_to_Var_Multi_Line($inputfile);
# First tag & Second tag match
if ( $body =~ /(.*)<body(.*?)>(.*)<\/body>/s )
{ # error :
my $body = $3; # $body is local here
# correction :
#Print to check if extract ok # declare another variable outside if
print $body, "\n";
}
# Write to file my match multiple line string #
open(my $fh_body, '>:encoding(UTF-8)', $outputfile)
or die "Could not open file '$outputfile' $!";
print $fh_body "$body\n";
close $fh_body;
# sub #
sub File_to_Var_Multi_Line
{
if(@_ < 1)
{
print "Usage: line=File_to_Var_Multi_Line<file>\n";
exit(1);
}
my $inputfile_2 = "";
$inputfile_2 = $_[0];
open(my $fl_in, '<:encoding(UTF-8)', $inputfile_2)
or die "Could not open file '$inputfile_2' $!";
my $line = "";
my $row_2 = "";
while (my $row_2 = <$fl_in>)
{
$line .= $row_2;
}
return $line
}
输入测试文件:
<html>
<body>
<a href="page1.html">page 1</a><br>
<a href="page2.html">page 2</a><br>
<a href="page3.html">page 3</a><br>
<a href="page4.html">page 4</a><br>
<a href="page5.html">page 5</a><br>
</body>
</html>
答案 0 :(得分:0)
尽管RegEx match open tags except XHTML self-contained tags
您可能会发现&#39;范围运营商&#39;用于迭代文件。
例如:
while ( <$fl_in> ) {
if ( m,<BODY>,i .. m,</BODY>,i ) {
print;
}
}
条件是真的,如果你在&#39;体内&#39;标签。 (虽然它是以线为导向的,所以尾随的东西会被抓住了#39;)。