我正在尝试将一个正则表达式字符串与perl中的数据文件进行匹配,但是它一直在跳过我要前往的确切行......这里可能出错的是什么?
我的文件说:
<div class="definitionBox details" id="id-udt">
<span class="stempel">Udtale</span>
<span class="tekstmedium allow-glossing">
<span class="lydskrift"><span class="diskret">[</span>beˈgønˀə<span class="diskret">]</span></span>
</span>
我要上课“lydskrift”,所以我试图以多种方式获取其内容,直到我最终试图匹配所有这样的内容:
while (<FILE>) {
if ( <FILE> =~ m/(.+)/ ) {
open FARA, '>>:encoding(UTF-8)', 'udtale.txt';
print (FARA $1 . "\n");
close (FARA);
}
}
令人惊讶的是它不断给我这个:
<div class="definitionBox details" id="id-udt">
<span class="tekstmedium allow-glossing">
</span>
有趣的是,如果我将它们放在同一个perl文件中的DATA区域,它会匹配所有四行!但这不是我想要的,那么是什么让这里有所不同呢?
答案 0 :(得分:4)
首先,我认为你的文件在顶部还有一行,你不包括在内。我怀疑的原因如下。
您的问题不是正则表达式,您的问题是<FILE>
每次调用它时都会读取一行。因此,每次循环都会在while(<FILE>)
中读取一行,然后在if(<FILE> =~ m/(.+)/)
中读取另一行。您的if
就是这样:
if(m/(.+)/)
以便它使用$_
将填充的默认while(<FILE>)
变量。
此外,您的while
循环正在完成比以往更多的工作,您可以这样做:
open FARA, '>>:encoding(UTF-8)', 'udtale.txt';
while(<FILE>) {
print FARA;
}
close (FARA);
甚至是这样:
open FARA, '>>:encoding(UTF-8)', 'udtale.txt';
print FARA while(<FILE>);
close (FARA);
如果你想跳过空白行,那么可能就是这样:
open FARA, '>>:encoding(UTF-8)', 'udtale.txt';
while(<FILE>) {
chomp;
print FARA $_, "\n" if($_);
}
close (FARA);
答案 1 :(得分:2)
要构建mu is too short's solution,这就是我写它的方式:
open FARA, '>>:encoding(UTF-8)', 'udtale.txt' or die $!;
while (<FILE>) {
print FARA if /./;
}
close FARA;
或者,如果您还想跳过仅包含空格的行:
open FARA, '>>:encoding(UTF-8)', 'udtale.txt' or die $!;
while (<FILE>) {
print FARA if /\S/;
}
close FARA;