【发布时间】:2010-03-20 13:55:21
【问题描述】:
我在 Perl 脚本中有以下输入,我希望在每个 <table>...</table> 结构中首次出现 NAME="..." 字符串。
整个文件被读入单个字符串,正则表达式作用于该输入。
但是,正则表达式总是返回最后一次出现的 NAME="..." 字符串。谁能解释发生了什么以及如何解决这个问题?
Input file:
ADSDF
<TABLE>
NAME="ORDERSAA"
line1
line2
NAME="ORDERSA"
line3
NAME="ORDERSAB"
</TABLE>
<TABLE>
line1
line2
NAME="ORDERSB"
line3
</TABLE>
<TABLE>
line1
line2
NAME="ORDERSC"
line3
</TABLE>
<TABLE>
line1
line2
NAME="ORDERSD"
line3
line3
line3
</TABLE>
<TABLE>
line1
line2
NAME="QUOTES2"
line3
NAME="QUOTES3"
NAME="QUOTES4"
line3
NAME="QUOTES5"
line3
</TABLE>
<TABLE>
line1
line2
NAME="QUOTES6"
NAME="QUOTES7"
NAME="QUOTES8"
NAME="QUOTES9"
line3
line3
</TABLE>
<TABLE>
NAME="MyName IsKhan"
</TABLE>
Perl 代码从这里开始:
use warnings;
use strict;
my $nameRegExp = '(<table>((NAME="(.+)")|(.*|\n))*</table>)';
sub extractNames($$){
my ($ifh, $ofh) = @_;
my $fullFile;
read ($ifh, $fullFile, 1024);#Hardcoded to read just 1024 bytes.
while( $fullFile =~ m#$nameRegExp#gi){
print "found: ".$4."\n";
}
}
sub main(){
if( ($#ARGV + 1 )!= 1){
die("Usage: extractNames infile\n");
}
my $infileName = $ARGV[0];
my $outfileName = $ARGV[1];
open my $inFile, "<$infileName" or die("Could not open log file $infileName");
my $outFile;
#open my $outFile, ">$outfileName" or die("Could not open log file $outfileName");
extractNames( $inFile, $outFile );
close( $inFile );
#close( $outFile );
}
#call
main();
【问题讨论】:
-
请在您的代码中添加一些真正的缩进。