基本上,我循环浏览html文件并寻找一些正则表达式。它们匹配的很好,但我不希望每个文件都包含匹配项,但循环运行时,每次迭代都包含相同的匹配项(尽管它不在该文件中)。我假设通过使用$ 1它是坚持通过每次迭代。避免正则表达式匹配变量被重用
我试过在每次真正的匹配之后直接使用一个任意的正则表达式来重置它,但那似乎不起作用。我从这个主意中得到的线索似乎在最佳实践和原始问题问题上有很多争论,所以我认为值得向我的代码请求具体建议。很可能不是写在一个伟大的方式之一:
# array of diff filenames
opendir(TDIR, "$folder/diff/$today") || die "can't opendir $today: $!";
@diffList = grep !/^\.\.?$/, readdir(TDIR);
closedir TDIR;
# List of diff files
print "List of Diff files:\n" . join("\n", @diffList) . "\n\n";
for($counter = 0; $counter < scalar(@diffList); $counter++) {
# Open diff file, read in to string
$filename = $diffList[$counter];
open FILE, "<", "$folder/diff/$today/$filename";
while(<FILE>) {
$lines .= $_;
}
close FILE or warn "$0: close today/$filename: $!";
# Use regular expressions to extract the found differences
if($lines =~ m/$plus1(.*?)$span/s) {
$plus = $1;
"a" =~ m/a/;
} else {$plus = "0";}
if($lines =~ m/$minus1(.*?)$span/s) {
$minus = $1;
"a" =~ m/.*/;
} else {$minus = "0";}
# If changes were found, send them to the database
if($plus ne "0" && $minus ne "0") {
# Do stuff
}
$plus = "0";
$minus = "0";
}
如果我把里面打印了“做的东西”的话,它总是真实,总是显示在其中一个文件中发现相同的两个值。 希望我已经足够好地解释了我的情况。任何意见表示赞赏,谢谢。
向我们展示循环?你已经发布的代码似乎很好看后... – Cameron 2013-03-12 21:38:21
当然 - 让我添加更多的信息 – Chris 2013-03-12 21:38:53
基本上从一个目录中获取文件名列表到数组中,循环该数组并打开每个文件一个一。检查两个特定的正则表达式。如果两个都匹配成功,我想将它们发送到数据库(这一步很好)。如果使用相同的匹配(我知道只有一个文件),循环的每一步都会到达数据库。 – Chris 2013-03-12 21:46:09