【发布时间】:2015-01-01 01:53:49
【问题描述】:
我想简单地取所有字符直到行尾,并将它们放在一个变量中。这是一个可以解释更多的尝试:
open my $in, '<', 'in.txt';
$iteration = 0
while(<$in>){
chomp;
next if /^#|^$/; //Skip over lines starting with # or empty lines.
if($iteration==0) {
die "Error in file formatting!\n" unless /^Data1: [.]*/; //*****
my ($data1) = /Data[1]: ([.]*)/; //*****
$iteration++;
}
else if($iteration==1) {
die "Error in file formatting!\n" unless /^Data2: \d+/;
my ($data2) = /Data[2]: (\d+)/;
$iteration++;
}
else if($iteration==2) {
die "Error in file formatting!\n" unless /^Data3: \d+/;
my ($data3) = /Data[3]: (\d+)/;
$iteration=0;
}
}
在循环内的第一个 if 语句中,它会在行首查找字符串“Data[1]:”,现在我想获取之后的所有内容,并将其放入变量中。所以,空格、标点符号、数字、下划线等都很好,但是一旦有新行出现,我想继续循环中的下一行,所以停在那里(我想停在行尾)。
【问题讨论】:
-
next if /\s*(?:#|$)/不会跳过空行或以#开头的行。它会跳过所有包含#的行,以及所有以行结尾的行。简而言之:所有行。 -
@TLP 实际上,这真的很有帮助,因为我认为这也解决了我的问题。我将如何查看它是否以 # 开头然后转到行尾?这基本上也是我在我的问题中需要做的。
-
[a-Z]是无效范围。 -
真的吗?它本来是有帮助的。如果你想跳过以
#开头的行,你需要用^锚定到行的开头:/^#/或/^\s*#/以允许可选的空格。 -
非常感谢 TLP。我想我现在对正则表达式的所有选项有了更多的了解。